标签:字符 并且 唤醒锁 体验 监听 idt 相同 action 模式
https://www.jianshu.com/p/10bdbf883c46?utm_source=desktop&utm_medium=timeline
在 Android 5.0 中,全面由Dalvik转用ART(Android Runtime)编译。大大提高了性能。
采用全新Material Design设计,页面更加的美观,立体。
设备未锁定且其屏幕处于打开状态,通知可以显示在小型浮动窗口中,称为浮动通知。
启动或绑定服务必须显式启动,如果隐式启动,会引发下列异常:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit
如果非要隐式启动,可以使用下列方案来避免异常:
val intent = Intent("Service对应的Action")
intent.`package` = packageName
bindService(intent,mServiceConnection,BIND_AUTO_CREATE)
用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。
//检测某个权限是否已经被授予
//PackageManager.PERMISSION_GRANTE:获得权限
//PackageManager.PERMISSION_DENIED:为获得权限
ContextCompat.checkSelfPermission(Context context,String permission)
//申请权限
ActivityCompat.requestPermissions(Activity activity,String[] permissions, int requestCode)
//处理授权
onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
//解释说明权限的用途
ActivityCompat.shouldShowRequestPermissionRationale(Activity activity,String permission)
低电耗模式:如果用户拔下设备的电源插头,并在屏幕关闭后的一段时间内使其保持不活动状态,设备会进入低电耗模式
。 在该模式下设备会尝试让系统保持休眠状态
。在该模式下,设备会定期短时间恢复正常工作,以便进行应用同步,还可让系统执行任何挂起的操作
。
应用待机模式:应用待机模式允许系统判定应用在用户未主动使用它时处于空闲状态。当用户有一段时间未触摸应用时,系统便会作出此判定。如果拔下了设备电源插头,系统会为其视为空闲的应用停用网络访问以及暂停同步和作业
。
在低电耗模式下,您的应用会受到以下限制:
Android 6.0版移除了对 Apache HTTP
的支持,推荐使用HttpURLConnection
,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。
如果想继续使用Apache HTTP
,必须先在build.gradle文件中如下声明:
android {
useLibrary ‘org.apache.http.legacy‘
}
为了提高私有文件的安全性,应用私有目录
被限制访问,此设置可防止私有文件的元数据泄漏,如它们的大小或存在性。
FileUriExposedException
,现在改用FileProvide来访问文件。<manifest>
...
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
...
</application>
</manifest>
file_paths.xml
文件内容:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<paths>
<files-path path="files" name="files" />
<cache-path path="files" name="cache" />
...
</paths>
</resources>
标签 | 路径 |
---|---|
files-path | getFilesDir() |
cache-path | getCacheDir() |
external-path | Environment.getExternalStorageDirectory() |
external-files-path | getExternalFilesDir() |
external-cache-path | getExternalCacheDir() |
external-media-path | getExternalMediaDirs() |
root-path | / |
<files-path path="image" name="files" />
:对应的文件路径为:getFilesDir() / image/
注意:移除的是
隐式广播
。正在前台运行的应用程序如果在主线程中动态注册
了该广播,该应用程序仍然可以接收到该广播。
Android 6.0引入了低电耗模式
,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU和网络活动,从而延长电池寿命。而Android 7.0则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态
(例如用户外出时把手持式设备装在口袋里)时应用部分CPU和网络限制,进一步增强了低电耗模式
。
如果在后台服务中调用startService()
,则会抛出IllegalStateException
。 调用Context.startForegroundService()
将启动一个前台服务。即使应用在后台运行,系统也允许其调用 Context.startForegroundService()
。不过,应用必须在创建服务后的五秒内调用该服务的startForeground()
。
为节约电池电量、保持良好的用户体验和确保系统健康运行,在运行Android 8.0的设备上使用后台应用时
,降低了后台应用接收位置更新的频率
。此行为变更会影响包括Google Play服务在内的所有接收位置更新的应用。
影响的API:
Android 8.0
引入了通知渠道
,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别
。从Android 8.0(API 级别 26)开始,必须为所有通知分配渠道,否则通知将不会显示。通过将通知归类为不同的
渠道
,用户可以停用您应用的特定通知渠道(而非停用您的所有通知),还可以控制每个渠道的视觉和听觉选项。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//创建通知渠道
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
//注册渠道
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
Android 8.0
引入了对在应用启动器图标上显示通知标志的支持。通知标志可反映某个应用是否存在与其关联、并且用户尚未予以清除也未对其采取行动的通知。通知标志也称为通知点
(强迫症非常讨厌的东西)。MessagingStyle类
的通知可在其折叠形式中显示更多内容。对于与消息有关的通知,您应使用MessagingStyle类
。您还可以使用新的addHistoricMessage()
,通过向与消息相关的通知添加历史消息为会话提供上下文。NotificationListenerService类
的onNotificationRemoved()
。setTimeoutAfter()
创建通知时您可以设置超时。您可以使用此函数指定一个持续时间,超过该持续时间后,通知应取消。如果需要,您可以在指定的超时持续时间之前取消通知。Android 8.0(API 级别 26)
引入了自适应启动器图标,它可以在不同设备型号上显示为不同的形状。例如,在一台原始设备制造商 (OEM) 设备上,自适应启动器图标可显示为圆形,而在其他设备上则可显示为方圆形。每个设备的原始设备制造商 (OEM) 都会提供一个蒙版,系统使用该蒙版渲染所有具有相同形状的自适应图标。自适应启动器图标还会在快捷方式、“设置”应用、共享对话框和概览屏幕中使用。
Android 9
中得到了改进。后台对传感器的访问受限:Android 9
限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9
设备的后台运行,系统将对您的应用采取以下限制:
如果需要在运行
Android 9
的设备上检测传感器事件,请使用前台服务。
限制访问通话记录:Android 9
引入CALL_LOG权限组
并将READ_CALL_LOG、WRITE_CALL_LOG和PROCESS_OUTGOING_CALLS
权限移入该组。 在之前的Android版本
中,这些权限位于PHONE权限组
。
如果您的应用需要访问通话记录或者需要处理去电,则您必须向CALL_LOG权限组
明确请求这些权限。 否则会发生SecurityException
。
为帮助确保应用稳定性和兼容性,此平台对某些非SDK函数
和字段
的使用进行了限制;无论您是直接访问这些函数
和字段
,还是通过反射或 JNI 访问,这些限制均适用。 在 Android 9 中
,您的应用可以继续访问这些受限的接口;该平台通过 toast
和日志条目提醒您注意这些接口。 如果您的应用显示这样的 toast
,则必须寻求受限接口之外的其他实现策略。
默认启用网络传输层安全协议 (TLS):默认使用https
,会阻止http
请求,如果想继续使用http
可以在清单文件中做如下配置:
<application
...
android:usesCleartextTraffic="true">
...
</application>
在Android 6.0 中
,我们移除了对 Apache HTTP
的支持。从· Android 9 开始·,该内容库已从 bootclasspath
中移除,且默认情况下应用无法使用它。要继续使用Apache HTTP
,以Android 9
及更高版本为目标平台的应用可以向其 AndroidManifest.xml
添加以下内容:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
如果应用以Android 9
或更高版本为目标平台并使用前台服务,则必须请求FOREGROUND_SERVICE
权限。这是普通权限,因此,系统会自动为请求权限的应用授予此权限。
如果以Android 9
或更高版本为目标平台的应用尝试创建前台服务且未请求FOREGROUND_SERVICE
,则系统会抛出SecurityException
。
标签:字符 并且 唤醒锁 体验 监听 idt 相同 action 模式
原文地址:https://www.cnblogs.com/tc310/p/11745746.html