首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在 Android 11 及更高版本系统中处理可空性

即使您随后调用一个方法或试图访问 x 等非空变量属性,也不会面临空指针异常的风险。许多开发者向我们反馈表示,自从有了该特性后,他们便可以把更多精力放在代码设计上并为用户打造质量更高的应用。...不用担心,Kotlin 编译器能够识别 Java 代码的注释,从而判定方法返回的结果是否为可空值,例如: JAVA public @Nullable String getCurrentName() {...@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回的结果视为非空类型,并禁止您在之后的代码中把该结果设置为 null。...我们将继续遵循以下原则为 Android SDK 添加注释: 先在较低版本 (例如 Android 10) 中采用 @RecentlyNullable 和 @RecentlyNonNull,然后再在新版本...此举的目的是为了给您预留至少一个版本发布周期的时间更新 Kotlin 代码,确保其质量更高、更加健壮。 Java 是 Oracle 和/或其附属公司的注册商标。

1.5K10

Activity 过渡动画 — 让切换更加炫酷

介绍 在 android5.0 以上版本中,google 为我们提供了几种 activity 切换的过渡动画,目的是为了让 activity 切换转场更加美观,而在 android5.0 之前的 activity...而 androi5.x 提供的切换动画就显得非常自然,而且容易使用。 现在我们来看看 androi5.x 提供的动画效果图: ?...Activity过渡动画 在 androi5.x 中,为 activity 提供了三中动画效果,分别是: explode(分解) slide(滑进滑出) fade(淡入淡出) 这三种都是 activity...setContentView(); 方法前加入一行代码: //在需要启动的 activity 中开启动画的特征 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS...); 或者,在 AnimationActivity 中设置如下 style,并引用到 AnimationActivity 即可。

3.5K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android系统线控和歌曲信息屏显的那点事

    AudioManager配合RemoteControlClient 在Android 5.0之前的版本中,Android推荐使用AudioManager的一系列功能来实现线控和锁屏信息显示功能。...MediaSession Android5.0及以后的版本RemoteControlClient被Deprecate,Android推荐使用最新的MediaSession来统一管理线控和歌曲信息展示,这样一来...及以后的版本中线控信息在这里处理 mMediaSession.setCallback(new MediaSessionCompat.Callback() { @Override...,Android5.0之前和之后的版本处理按键信息的地方是不同的,为了适配所有系统版本,我们把两种注册方式都加入。...方法中,int类型的key值会通过MediaMetadata.getKeyFromMetadataEditorKey(key)方法转换为String型,然后再放到一个mMetadataBuilder中,

    2.9K90

    Android 沉浸式状态栏的实现

    前言 Android沉浸式体验有几个注意点 Android4.4(api19)及以上的版本才支持 Android5.0(api21)及以上的版本状态栏多了一个半透的黑色层 Android5.0(api21...)的黑色层通过style去掉后 应用切出去后再切进来后会再次出现 我的解决方案 目前这种方案 不管是各个版本 还是是否有侧滑都没有问题 首先先建两个文件夹 layout-v19和values-v19 之所以不添加...color/colorPrimaryDark @color/colorAccent onCreate方法中添加...(Kotlin代码) 用这种方式去除Android5.0以上 状态栏的黑色半透层 在重新切回应用时也不会被再次添上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP...window.statusBarColor = Color.TRANSPARENT } 接下来就是设置状态栏的背景了 我的方式是建了适配api19前后的两个layout文件直接添加到了页面中

    69610

    Android 新特性之文件加密对TEE的要求

    加密可确保未经授权方在尝试访问相应数据时无法读取它们。 Android 有两种设备加密方法:全盘加密和文件级加密。 ?...Android7.0 及更高版本支持文件级加密。该功能处于启用状态时,已加密设备在启动后将直接进入锁定屏幕,从而可让用户快速访问重要的设备功能,例如无障碍服务和闹钟。...引入文件级加密和新 API 后,便可以将应用设为加密感知型应用,这样一来,它们将能够在受限环境中运行。这些应用将可以在用户提供凭据之前运行,同时系统仍能保护私密用户信息。...· 设备加密 (DE) 存储空间:在直接启动模式期间以及用户解锁设备后均可用。 Android 开放源代码项目 (AOSP) 中提供了 EXT4 文件系统中的文件级加密的完整实现。...在满足相关要求的设备上,只需启用该实现即可使用该功能。选择使用 FBE 的制造商可能想要了解根据所用系统芯片 (SoC) 优化该功能的方法。 划重点来了,完整的实现FBE需要以下条件! ?

    3.1K50

    Material Design 实战 之 第六弹 —— 可折叠式标题栏(CollapsingToolbarLayout) & 系统差异型的功能实现(充分利用系统状态栏空间)

    只不过Android5.0系统之前是无法对状态栏的背景或颜色进行操作的,那个时候也没有Matenal Design的概念。 而Android5.0及之后的系统就支持这个功能。...所以这里需要一个系统差异型的效果,即 对于Android5.0及之后的系统使用背景图和状态栏融合的模式; 在之前的系统中使用普通的模式; 让背景图和系统状态栏融合,需要借助Android:fitsSystemWindows...方法很简单,在主题中将android:statusBarColor属性的值指定成@android:color/transparent即可。...然后在FruitAcuvityTheme中将状态栏的颜色指定成透明色, 由于values-v21目录是只有Android5.0及以上的系统才会去读取的, 因此这么声明是没有问题的。...现在只要是在Android5.0及以上的系统运行这个MaterialTest程序,水果详情展示界面的效果便如下: ? 跟刚刚的效果相比,视觉体验是完全不同档次的。 ?

    2.3K40

    Android 设备唯一标识(适配Android版本)

    你可能要说IMEI和Mac地址可以获取到,但是它并不会适配Android的所有版本。在高版本中这个已经被弃用了,比如Android9.0、Android10.0、Android11.0。...因为我现在的项目编译版本比较高,我当前的目标版本是Android11.0,最低适配到Android5.0。Android的高版本会自动适配低版本。 ? 4....看到图中画横线这个方法,你把鼠标放上去,它会说已经过时了,也就是弃用的意思,因为在build.gradle中当前的版本是Android11.0,而我之前说过,在Android9.0时就已经弃用了,使用过时的方法会很容易出问题...,当然这个问题,你在可以使用的Android版本设备中运行是不会出现的。...Android 10.0 在上面我就说过在Android9.0及以后版本中第三方应用是无法获取到IMEI的,那么现在你依然不用改代码,直接运行在Android10.0的虚拟机上。 ?

    4.5K41

    Android--SVG在安卓系统中的应用

    ,性能高等优势,谷歌在Android5.0引进了SVG,并转化为Vector,在Android中指的是Vector Drawable,也就是Android中的矢量图,可以说Vector就是Android...FLAG2,X,Y):弧线 ,相当于arcTo() Z = closepath():关闭路径(会自动绘制链接起点和终点) 注意:关于这些语法,开发者不需要全部精通,而是能够看懂即可,这些path标签及数据生成都可以交给工具来实现...接下来是我们程序员需要注意的地方,在工程中使用Vector Drawable兼容5.0以下的版本方法 1、使用Android Studio 2.2以上的版本,gradle版本在2.0以上 1.1、在gradle...中添加 defaultConfig { vectorDrawables.useSupportLibrary = true } 1.2、在gradle中添加 compile...Button 不支持app:srcCompat,支持Xml 中使用在Button的selector 2.3 RadioButton 直接使用 2.4 textview的drawable 直接使用 2.5 Android5.0

    2.8K20

    Multidex记录一:介绍和使用

    0xffff]: 65536 超过最大方法数限制的问题,是由于DEX文件格式限制,一个DEX文件中method个数采用使用原生类型short来索引文件中的方法,也就是2个字节共计最多表达65536个method...Google官方:配置方法数超过 64K 的应用 Android 5.0 之前版本的 Dalvik 可执行文件分包支持 Android 5.0(API 级别 21)之前的平台版本使用 Dalvik 运行时来执行应用代码...Android 5.0 及更高版本的 Dalvik 可执行文件分包支持 Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,后者原生支持从 APK 文件加载多个 DEX...修改gradle配置文件 如果您的minSdkVersion 设置为 21 或更高值,您只需在模块级 build.gradle 文件中将multiDexEnabled 设置为 true,如此处所示: android...例如,如果代码使用自检机制或从原生代码调用 Java 方法,那么这些类可能不会被识别为主 DEX 文件中的必需项。

    1.7K10

    Android5.0 新特性

    theme: channing-cyan Android5.0新特性 Material Design设计风格 谷歌希望能够让MaterialDesign给用户带来纸张化的体验。...Android设备附近时,绕过锁屏界面直接解锁 RecylerView出现替代ListView RecylerView具有高度的解耦,异常的灵活性和更高的效率,可支持设置不同的布局管理器LayoutManager...builder的bigContentView属性 由于布局是在App进程中,而通知明显不是App进程因此需要使用RemoteView封装自定义视图 悬浮通知 当该通知出现时会在屏幕上悬浮一段时间后自动消失...相比ActonBar,ToolBar更自由更有设置的空间,随处放置 使用方法和ActionBar一样 需要在style中设置将ActionBar去除,并且在代码中显示调用setSupportActionBar...将ToolBar引用放置其中即可, Palette取色器 Android5.0可通过Palette取色器来提取颜色,以动态适配当前界面的色调,使得App颜色的基调和谐统一。

    65030

    Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

    因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已ROOM发布时都会对标准Android发行版作或多或少的改动,使得应用层程序在处理进程和Service保活问题上变的异常复杂,且很难兼容,因为说不定哪款手机或者哪个版本的省电策略发生改变...概述 近期做了一个Android项目,涉及到了后台进程和Service保活的问题,网上找了很多资料,基本的保活方法都测试了。结果是:不同的手机,不同的Android版本保活效果各有差异。...1)控制onStartCommand函数的返回值: 我对这个函数的理解是:当服务被异常终止时,是否重启服务?有些文章里面在用这个做保活时,修改的是flag,在我实际测试中是无效。...互拉的方式有很多种: 1)可以通过监听系统广播来把自己拉起来 2)可以多个app相互拉 3)可以把自己的服务搞成前台服务 4)在service的onstart方法里返回 STATR_STICK 5)添加...[注意]: 目前在Android 5.0系统上会把fork出来的进程放到一个进程组里, 当程序主进程挂掉后,也会把整个进程组杀掉,因此用fork的方式也无法在Android5.0及以上系统实现守护进程.

    2.3K30

    Android ANR分析(trace文件的产生流程)

    4.在收集完第一步信息后,接下来便开始统计各进程本地的更多信息,如虚拟机信息,java线程状态及堆栈。...接着分析RunCheckPoint函数,先看前一部分: 对于处于Runnable状态的线程执行它的RequestCheckpoint函数会返回true,其他状态的线程则会返回false。...安插点 ART的解释器安插主动safepoint的位置在循环的回跳处(backedge,具体来说是在跳转前的源头处)以及方法返回处(return / throw exception)。...ART Optimizing Compiler安插主动safepoint的位置在循环回跳处(backedge,具体来说是在跳转前的源头处)以及方法入口处(entry) 被动safepoint 所有未内联的方法调用点...之所以要作为safepoint,是因为执行到方法调用点之后,控制就交给了被调用的方法,而被调用的方法可能会进入safepoint,safepoint中可能需要遍历栈帧,因此caller也必须处于safepoint

    1.1K40
    领券