Android O适配
官方文档:https://developer.android.com/preview/features/background.html#migration
一、从Android O针对服务以及广播这两个组件做了如下的限制
1、前台服务不受影响,但后台服务会被限制。首先需要确定应用是前台应用还是后台应用,只要满足以下任意一个都认为是前台App:
(1)App有一个可见的Activiy
(2)App有一个前台是service
(3)App与其他前台App有交互,比如远程服务绑定、数据库监听等
总之,前台App的service使用可以随心所欲,但是当应用退入后台进入idle状态时,系统会停止这个应用的service,停止方式与Service.stopSelf()方法等效。可惜还没固件,不然可以验证这个特性。App从前台刚转变成后台状态时,在有限的数分钟内还是可以启动后台服务的,这么做的原因主要是为了给App一个机会去处理任务。对于后台服务的受限,Android推荐使用JobScheduler jobs来替代曾经的后台服务。另外,提供了新的Context.startForegroundService()的方法来启动服务。
2、广播接收组件的限制
其实从Android7.0已经对广播的做了限制,详情请看点击打开链接。主要是对CONNECTIVITY_ACTION等三个广播做了限制。AndroidO则做了加强,有如下的几点:
(1)静态注册的receiver将不能接收implicit广播。Android提供的替代方案是使用registerReceiver方法来动态注册。这个相当于对通过监听系统各种广播事件达到拉起应用来干坏事的方式进行了封杀。当然还提供另外的JobScheduler job方案来解决这个问题。
(2)静态注册的receiver依然能接收explicit广播。
(3)系统应用不受这个限制。这个就有点坑爹啊。
3、如何确定implicit广播?
按照google的说法是绝大部分可以静态注册的广播都是implicit的,简单理解就是为系统服务的广播,不面向于App。google考虑到如此削弱广播的力量带来的改动太多,为此对一些广播加入了白名单,处于白名单中的广播的不受限制,对于其他广播都需要寻求替代方案。
二、JobScheduler
1、从Api21引入JobScheduler之后google就一直强推,不难想象JobScheduler将从AndroidO逐渐开始大展身手。JobScheduler简单的理解就是一个作业调度框架,应用每提交一个作业就会进入一个作业队列,调度框架不断的从队列中取出作业进行调度。
2、JobScheduler主要分为两种
(1)一次性job调度,示例代码如下:
public void scheduleJob() {JobInfo.Builder builder = new JobInfo.Builder(mJobId++, mServiceComponent);builder.setMinimumLatency(10 * 1000);builder.setOverrideDeadline(20 * 1000);builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);JobScheduler tm = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);tm.schedule(builder.build());
}
(2)重复性job调度,示例代码如下:
public void scheduleJob() {JobInfo.Builder builder = new JobInfo.Builder(mJobId++, mServiceComponent);builder.setPeriodic(3000);builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);JobScheduler tm = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);tm.schedule(builder.build());
}
(3)JobService,示例代码如下:
public class MyJobService extends JobService {private static final String TAG = MyJobService.class.getSimpleName();@Overridepublic void onCreate() {super.onCreate();Log.i(TAG, "Service created");}@Overridepublic void onDestroy() {super.onDestroy();Log.i(TAG, "Service destroyed");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return START_NOT_STICKY;}@Overridepublic boolean onStartJob(final JobParameters params) {Log.i(TAG,"JobId=" + params.getJobId());long duration = params.getExtras().getLong(WORK_DURATION_KEY);// Uses a handler to delay the execution of jobFinished().Handler handler = new Handler();handler.postDelayed(new Runnable() {@Overridepublic void run() {jobFinished(params, false);}}, duration);Log.i(TAG, "on start job: " + params.getJobId());// Return true as there's more work to be done with this job.return true;}@Overridepublic boolean onStopJob(JobParameters params) {// Stop tracking these job parameters, as we've 'finished' executing.Log.i(TAG, "on stop job: " + params.getJobId());// Return false to drop the job.return false;}
}
3、使用限制:
(1)JobScheduler是api21引入,不过还好有FirebaseJobDispatcher这个兼容方案
(2)应用进程被kill掉,job也会被取消掉
Android O适配相关推荐
- 鸿洋android屏幕适配四部曲-传送门
鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...
- Android 屏幕适配
一.适配方式之dp 名词解释 分辨率:480*800,1280*720.表示物理屏幕区域内像素点的总和.(切记:跟屏幕适配没有任何关系) 因为我们既可以把1280*720 的分辨率做到4.0 的手机上 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。
Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...
- android 布局适配虚拟键适配
今天,看到关于虚拟键盘的内容,于是记录一下. 如果是控件,可以直接使用Android:fitsSystemWindows="true"),但是如果是popwindow,那就必须获取 ...
- android q测试机型,小米9安卓Q系统刷机包开启测试 小米Android Q适配机型一览
7月9日,小米9 Android Q Beta版已开启测试.MIUI官方微博宣布,小米9 Android Q Beta版已开启测试,正在招募尝鲜用户.看名字就可以看出,新系统是基于Android Q打 ...
- Android屏幕适配全攻略(最权威的官方适配指导) (转)
招聘信息: Cocos2d-X 前端主程 [新浪微博]手机客户端iOS研发工程师 20k-40k iOS 开发工程师 iOS高级开发工程师(中国排名第一的企业级移动互联网云计算公司 和创科技 红圈营销 ...
- android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度
为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...
- android 7.0 禁止 imei,Android一些适配
# Android 版本适配重点 其他细节请查看官网对应版本:https://developer.android.com/preview ## 7.0 1. 后台优化 - 移除了以下静态注册广播通知( ...
- 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)
来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...
最新文章
- 碾压Bert?“屠榜”的XLnet对NLP任务意味着什么
- 松下SW-9585-C全功能DVD刻录机 狂降100+享受专业刻录!
- 大家都较熟悉之 Kubernetes API 分析
- excel 宏编程_在 Excel 中使用 Python 开发宏脚本
- 深入理解Redis分布式锁
- Docker学习2-虚拟化
- Vue中computed,methods,watch用法上的异同
- TeeChart插入
- linux服务器运维基础学习
- python数据可视化常用工具推荐
- [Excel图表] 搞定散点图
- 腾讯入股艺龙,在线旅游市场引发关注
- 《CSS揭秘》-总结47个Css技巧(一):常用的背景与边框技巧
- java方法的通用格式,【学习笔记】使用Java读取、写入Excel全版本(包含xls、xslx格式)通用方法及代码展示(POI)...
- Linux配置ssh远程连接服务
- 2021年硕士研究生入学统一考试408计算机学科考试大纲
- 《科技创业启示录》一第3章 拉尔斯·欣里希斯
- 小米上市,工号1000以内千万富翁,100以内亿万富翁
- vue点击复制链接功能
- 2.4 javascript2