即使您随后调用一个方法或试图访问 x 等非空变量属性,也不会面临空指针异常的风险。许多开发者向我们反馈表示,自从有了该特性后,他们便可以把更多精力放在代码设计上并为用户打造质量更高的应用。...不用担心,Kotlin 编译器能够识别 Java 代码的注释,从而判定方法返回的结果是否为可空值,例如: JAVA public @Nullable String getCurrentName() {...@NonNull 注释则恰好与之相反,如果一个方法标有 @NonNull 注释,Kotlin 编译器会将该方法返回的结果视为非空类型,并禁止您在之后的代码中把该结果设置为 null。...我们将继续遵循以下原则为 Android SDK 添加注释: 先在较低版本 (例如 Android 10) 中采用 @RecentlyNullable 和 @RecentlyNonNull,然后再在新版本...此举的目的是为了给您预留至少一个版本发布周期的时间更新 Kotlin 代码,确保其质量更高、更加健壮。 Java 是 Oracle 和/或其附属公司的注册商标。
介绍 在 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 即可。
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中,
前言 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文件直接添加到了页面中
正在运行 startService() 方法启动的服务,且不属于上述两个更高类别进程的进程。 1.4....方案适用范围 该方案主要适用于 Android5.0 以下版本手机。 该方案不受 forcestop 影响,被强制停止的应用依然可以被拉活,在 Android5.0 以下版本拉活效果非常好。...系统在 Android5.0 以上版本提供了 JobScheduler 接口,系统会定时调用该进程以使应用进行一些逻辑操作。...该方案在 Android5.0 以上版本中不受 forcestop 影响,被强制停止的应用依然可以被拉活,在 Android5.0 以上版本拉活效果非常好。...最新 Android 版本(Android N)中系统好像对账户同步这里做了变动,该方法不再有效。 5.
加密可确保未经授权方在尝试访问相应数据时无法读取它们。 Android 有两种设备加密方法:全盘加密和文件级加密。 ?...Android7.0 及更高版本支持文件级加密。该功能处于启用状态时,已加密设备在启动后将直接进入锁定屏幕,从而可让用户快速访问重要的设备功能,例如无障碍服务和闹钟。...引入文件级加密和新 API 后,便可以将应用设为加密感知型应用,这样一来,它们将能够在受限环境中运行。这些应用将可以在用户提供凭据之前运行,同时系统仍能保护私密用户信息。...· 设备加密 (DE) 存储空间:在直接启动模式期间以及用户解锁设备后均可用。 Android 开放源代码项目 (AOSP) 中提供了 EXT4 文件系统中的文件级加密的完整实现。...在满足相关要求的设备上,只需启用该实现即可使用该功能。选择使用 FBE 的制造商可能想要了解根据所用系统芯片 (SoC) 优化该功能的方法。 划重点来了,完整的实现FBE需要以下条件! ?
注意MediaProjectionManager是Android5.0之后新增的工具,故代码中要补充判断系统版本,如果是4.*及以下版本,则不可处理屏幕捕捉操作。...这个投影预览层即前面createVirtualDisplay方法返回的VirtualDisplay对象,具体的表面对象则为createVirtualDisplay方法中的渲染表面参数,也就是一个Surface...在实现截图功能时,这里的表面对象要作为createVirtualDisplay方法的输入参数。 acquireLatestImage : 获得最近的一幅图像数据。...该方法返回Image对象,需转换为Bitmap格式。...该方法在MediaCodec的getOutputBuffer方法之后调用。 stop : 停止工作。 release : 释放媒体转换资源。
只不过Android5.0系统之前是无法对状态栏的背景或颜色进行操作的,那个时候也没有Matenal Design的概念。 而Android5.0及之后的系统就支持这个功能。...所以这里需要一个系统差异型的效果,即 对于Android5.0及之后的系统使用背景图和状态栏融合的模式; 在之前的系统中使用普通的模式; 让背景图和系统状态栏融合,需要借助Android:fitsSystemWindows...方法很简单,在主题中将android:statusBarColor属性的值指定成@android:color/transparent即可。...然后在FruitAcuvityTheme中将状态栏的颜色指定成透明色, 由于values-v21目录是只有Android5.0及以上的系统才会去读取的, 因此这么声明是没有问题的。...现在只要是在Android5.0及以上的系统运行这个MaterialTest程序,水果详情展示界面的效果便如下: ? 跟刚刚的效果相比,视觉体验是完全不同档次的。 ?
你可能要说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的虚拟机上。 ?
UsageStatsManager是用来统计app使用情况的类,用于获取包含特定时间范围的应用包的使用情况统计信息;在Android api21(即Android5.0引入);系统API稳定性好,Android5.0...及以后版本都支持,不存在版本兼容问题。...} } } 使用UsageStatsManager来获取当前运行的app 我们将UsageStatsManager获取当前运行的app相关代码写在一个Service中,...Log.i(TAG, "top running app is : "+topActivity); } } } 这个方法是获取一定时间内...(代码里是10分钟)最后一个活动的应用的包名,我运行了视频软件,一直在视频界面但不去点它,10分钟后就捕获不到了。
全当增长技术,在真实的项目开发中尽量能不用就不要用得好。道理大家都懂的。...强大的地方是在root的情况下,可以实现静默安装和操作一切你想在设备内做事情。其方法如下。...实测中我有申请权限,但一样无法在应用内部调起。...3.在LocalService中绑定RemoteService并监听对方的创建和销毁,RemoteService中的实现也一样。...5.0以下的设备,可以参考下面的项目,在低版本中也可以使用。
,性能高等优势,谷歌在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
自android5.0推出以来,google大力宣扬Meterail Design这款视觉设计语言,在新系统上,大量的运用到了Meterail Design风格,显然这些效果低版本时并没有实现,那么google...是如何在低版本中做兼容的?...中的方法都会调用AppCompatDelegate的方法。...sdk版本判断,分别返回了不同版本的AppCompatDelegate实现类 private static AppCompatDelegate create(Context context, Window...开头的控件,兼容控件继承原控件,在使用过程中,开发人员写法和原来一样。
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 文件中的必需项。
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颜色的基调和谐统一。
Androi P之后Google可能会禁止使用反射来获取隐藏方法的调用,虽然在preview版本中只会以log的形式提示,但后续的版本可能会在使用反射时直接抛出错误。...关于隐藏方法 我们知道在Android源码中有部分代码是不允许开发者使用的,这里要分两种情况。...今天只说明对于没有打包进 android.jar的类,在不用反射的情况下的使用方法。...在gradle中这么写, dependencies { provided project(':libhookandroid') } 举个例子,比方这时候要用 ActivityThread,这里面有个...public方法 currentActivityThread(),我们要调用它,那么可以在lib项目下按报名建一个类 public class ActivityThread{ public static
因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已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及以上系统实现守护进程.
所以确定问题就是这个NewStringUTF方法引起的(但部分设备上有问题,部分设备没问题。看了一下好像是Android5.0及以后的系统就有此问题),问了其它同事,发现他们之前遇到过并且处理了。...我用的是cocos2d-x 2.x版本,找到CCImage.cpp文件,修改getBitmapFromJava方法 ?...IIII)V")) { CCLOG("%s %d: error to get methodInfo", __FILE__, __LINE__); return false...— 一个神奇的字符 (二) Java Native Interface C and C++ JNI - University of Cambridge Java Native Interface 探索在Android...中使用Emoji Font的方法
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
Android 各版本查询和开启悬浮窗权限 如果你是从事Android开发的程序员,那么你肯定对于权限这个词不会陌生,Android的权限分为一般权限和危险权限,一般权限(只需在AndroidManifest.xml...文件中声明即可),危险权限(需要手动申请),接下来进入正题。...判断也是要分Android的版本的,如Android6.0、Android6.0至Android8.0、Android8.0以上,更低的版本就不考虑了,(你不要和我说你现在还用着Android4.4或者...Android5.0,那你就是一个狠人,我惹不起),我的手机是9.0,亲测有效,判断的代码如下 在AndroidManifest.xml文件添加以下两个权限 方法里面,如下所示: if(!
领取专属 10元无门槛券
手把手带您无忧上云