Android 8.0后台执行限制
来源:互联网 发布:数据库笛卡尔积运算 编辑:程序博客网 时间:2024/06/06 08:55
Android O对应用在后台运行时可以执行的操作施加了限制,称为后台执行限制(Background Execution Limits),这可以大大减少应用的内存使用和耗电量,提高用户体验。后台执行限制分为两个部分:后台服务限制(Background Service Limitations)、广播限制(BroadcastLimitations)。
后台服务限制
如何才算是后台应用?除了下面情况外都是后台应用
1. 具有可见的Activity
2. 具有前台服务
3. 另一个前台应用已关联到该应用(通过bindService或者使用该应用的ContentProvider)。
当应用处于后台时:
1.在后台运行的服务在几分钟内会被stop掉(模拟器测试在1分钟左右后被kill掉)。在这段时间内,应用仍可以创建和使用服务。
2.在应用处于后台几分钟后(模拟器测试1分钟左右),应用将不能再通过startService创建后台服务,如果创建则抛出以下异常
Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.example.samsung.test/.TestService }: app is in background应用处于后台时,虽然不能通过startService创建后台服务,但仍可以通过下面的方式创建前台服务。
NotificationManager noti = (NotificationManager)getApplicationContext().getSystemService(NOTIFICATION_SERVICE);noti.startServiceInForeground();
后台服务会被kill掉,官方推荐可使用AlarmManager、SyncAdapter、JobScheduler代替后台服务。
广播限制
如果应用监听一些系统广播,当系统发出广播时,很多应用都会被唤醒,这会导致所有应用快速地连续消耗资源,从而降低用户体验。其实,大部分应用都不会处理这个广播,应用只是唤醒一下看看和自己是否有关,为了缓解这一问题,Android N对一些广播做出了限制:
1.targetSdkVersion为Android N(API level 24)及以上的应用,如果应用在AndroidManifest.xml中静态注册CONNECTIVITY_ACTION这个receiver,应用将不能收到此广播。如果应用使用Context.registerReceiver()动态注册receiver,应用仍可以收到这个广播。
2.运行在Android N及以上设备的应用,无论是targetSdkVersion是否是Android N,应用都不能发送或者接收ACTION_NEW_PICTURE和ACTION_NEW_VIDEO这两个广播。
而Android O执行了更为严格的限制。
1.动态注册的receiver,可接收任何显式和隐式广播。
2.targetSdkVersion为Android O(API level 26)及以上的应用,静态注册的receiver将不能收到隐式广播,但可以收到显式广播。下面例子说明
清单文件的receiver声明
<receiver android:name=".TestReceiver" android:enabled="true"> <intent-filter> <action android:name="com.test.example.testreceiver.action"></action> </intent-filter></receiver>
Receiver类定义
public class TestReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "onReceive", Toast.LENGTH_SHORT).show(); }}
①如果这样发送隐式广播,receiver将接收不到广播。
Intent intent = new Intent();intent.setAction("com.test.example.testreceiver.action");sendBroadcast(intent);
②如果这样发送显式广播,receiver仍可以接收到广播
Intent intent = new Intent();intent.setClassName("com.test.example.testreceiver", "com.test.example.testreceiver.TestReceiver");sendBroadcast(intent);
虽然静态注册的receiver不能接收隐式广播,但Google考虑到一些广播也不频繁发生,也有一些例外,对这些例外的静态注册的receiver,仍可接收隐式和显式广播。
ACTION_LOCKED_BOOT_COMPLETED、ACTION_BOOT_COMPLETED
ACTION_USER_INITIALIZE
ACTION_TIMEZONE_CHANGED
ACTION_LOCALE_CHANGED
ACTION_USB_ACCESSORY_ATTACHED
ACTION_USB_ACCESSORY_DETACHED
ACTION_USB_DEVICE_ATTACHED
ACTION_USB_DEVICE_DETACHED
ACTION_HEADSET_PLUG
……
详情请参考
https://developer.android.com/preview/features/background-broadcasts.html
据Google工程师透露,Google的目标是充满一次电,手机可用2~3天,这也可看到Google在手机续航方面的努力。
目前只有Android Studio2.4可以下载Android O 预览版SDK,下载地址
https://dl.google.com/dl/android/studio/ide-zips/2.4.0.6/android-studio-ide-171.3934896-windows.zip
- Android 8.0后台执行限制
- Android 8.0后台执行限制
- Android 8.0后台执行限制
- 后台执行限制
- Android O(8.0)后台service限制
- android后台进程数目限制
- Android Oreo 后台运行限制
- Android后台执行定时任务
- android 执行sql的长度限制
- Android中使用IntentService执行后台任务
- Android中使用IntentService执行后台任务
- android service 后台执行定时任务
- Android学习之定时执行后台任务
- android后台执行的定时任务
- Android Studio 后台执行的定时操作
- android: 后台执行的定时任务
- Android后台执行的定时任务
- Android Oreo 中对后台任务的限制
- 2017年5月许小年最新演讲:深圳人没房的,还是咬咬牙就买吧!
- JSP内置对象request 常用方法 案例
- jsp内置九大对象
- 无名管道
- Android系统源码学习步骤
- Android 8.0后台执行限制
- Python语言的优点和缺点
- 【脚本语言系列】关于PythonGUI界面PythonWin,你需要知道的事
- struts2使用注意点
- RecyclerView优雅的刷新
- Diameter of Binary Tree问题及解法
- hadoop搭建测试版
- 更好的学习与记忆
- Spring注解@Component、@Repository、@Service、@Controller区别