1.service 的生命周期,两种启动方式的区别
StartService 生命周期
onCreate ()————onStartCommand()———————onDestroy()
BIndService 生命周期
onCreate()-————onBind()—————onUnbind()——————————onDestroy()
区别
Service有两种启动方式,主要是startService和bindService。Service的生命周期方式onCreate,onStart,onDestroy。而这两种启动方式对Service声明周期的影响是不一样的。
1、startService方式启动服务,调用者与服务之间没有关联,即使调用者退出了,服务正常的运行,多次调用startService()方法并不会创建多个服务, 但是onStart()方法会被多次调用。通过startService,Service会经历 onCreate -> onStart,stopService的时候直接onDestroy。
2、bindService方式启动服务,调用者与服务之间绑定在一起,即调用者退出了,服务也就停止了。通过bindService, Service会经历onCreate-onBind,这个时候服务的调用者胡服务绑定在一起。调用者退出了,Service就会调用onUnbind->onDestoryed,所谓绑定在一起就共存亡。
2.如何保证Service不被杀死 ?
服务不被杀死 两种情况 ,一永远在执行,不执行onDestroy,另外一种方法执行完onDestroy()再执行onCreate();
1,通过service中的onstartCommand方法,他其中有一个参数是flag,他有四种标志,分别为:
START_STICKY:重启服务,如果没有传递给他一个intent,那么intent为null,
START_NOT_STICKY:如果不进行传递intent,将不会启动,所以不会收到null的intent.
START_REDELIVER_INTENT:重启后将重新的intent传递过来。
START_STICKY_COMPATIBILITY是START_STICKY的兼容版本,不保证一定会重启,所以建议使用第一个标志,
在使用的时候将onstartCommand方法分局不同的需求返回不同的标志即可,首先第一个标志。
2,通过在service中在自己的ondestory方法中,启动oncreate方法即可,这样也是非常简单的
3,通过更改优先级的方式,在清单文件中,将优先级更改为1000,应该就差不多了,在清理内存的时候,优先级越高的越不容易被杀死。
4,通过发送广播,在服务中,当服务销毁的时候发送条广播,广播接收器接收到广播的时候,重新启动服务
5,创建定时器,通过定时启动任务,每隔一定时间重新启动一次服务即可
6,通过将service更改为前台服务也可以避免被杀死
3.IntentService是什么,IntentService原理,应用场景及其与Service的区别
1.IntentService是一个用来处理异步任务并且处理完任务之后会自行退出的service(PS:handleMessage 里回调onHandleIntent之后调用了stopSelf(msg.arg1););
2,service 和IntentService的区别是,IntentService有自己的工作线程,不会阻塞主线程出现ANR,而且任务结束后会自己停止,不需要手动停止。相反service会依赖创建它的线程,所以在处理耗时操作时会出现ANR情况,一般要service+thread组合使用。
3,多次启动Intentservice会怎样?
多次启动不会创建多个service的实例,而是都会走onStartCommd和onstart方法,因为内部HandlerThread的缘故,多个任务不会同时执行,应为HandlerThread内部只有一个子线程,任务会排成队逐个执行直到结束。
4,什么情况下用到Intentservice?
任务要一步一步执行,并且执行结束后自行结束服务,比方说,自动更新,下载apk,安装apk,等等。
5.bindService和startService混合使用的生命周期以及怎么关闭
onCreate() —> onBind() —> onUnbind() –> onDestory();
1)创建服务onCreate()在整个生命周期仅执行一次;
2)每次调用服务必须首先bindService/onBind,执行unbindService/onUnbind后不能调用;
3)服务的生命周期受限于UI线程。一旦应用(Activity)终止,服务将onDestory销毁;
4)可以在绑定后调用服务里的功能。
1.如果先bindService,再startService:
在bind的Activity退出的时候,Service会执行unBind方法而不执行onDestory方法,因为有startService方法调用过,所以Activity与Service解除绑定后会有一个与调用者没有关连的Service存在
2.如果先bindService,再startService,再调用Context.stopService
Service的onDestory方法不会立刻执行,因为有一个与Service绑定的Activity,但是在Activity退出的时候,会执行onDestory,如果要立刻执行stopService,就得先解除绑定
3 先startService,再bindService。
首先在主界面创建时,startService(intent)启动方式开启服务,保证服务长期后台运行;
然后调用服务时,bindService(intent, connection, BIND_AUTO_CREATE)绑定方式绑定服务,这样可以调用服务的方法;
调用服务功能结束后,unbindService(connection)解除绑定服务,置空中介对象;
最后不再需要服务时,stopService(intent)终止服务。
6.用过哪些系统Service
Android系统中有众多的系统服务,其中有三大核心服务:ActivityManagerService、WindowManagerService、PackageManagerService。
系统服务一览表:
Android framework框架核心服务,管理整个框架中任务、进程管理, Intent解析等的核心实现,管理四大组建的生命周期。
Android framework框架核心服务,窗口管理服务。
Android framework框架核心服务,用于APK的解析、权限验证、安装等。
4.AccountManagerService
Android账户服务,提供了对账户、密码、授权的集中管理。
辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果,View的点击、焦点等事件分发管理服。
提供闹铃和定时器等功能。
Android中提供Widget的管理和相关服务
负责将预加载的bitmap组装成纹理贴图,生成的纹理贴图可以被用来跨进程使用,以减少内存。
AudioFlinger的上层管理封装,主要是音量、音效、声道及铃声等的管理。
备份服务。
负责监控电池的充电状态、电池电量、电压、温度等信息,当电池信息发生变化时,发生广播通知其他关系电池信息的进程和服务。
负责蓝牙后台管理和服务。
剪贴板服务。
14.CommonTimeManagementService
管理本地常见的时间服务的配置,在网络配置变化时重新配置本地服务。
网络连接状态服务。
内容服务,主要是数据库等提供解决方法的服务。
远程控制,通过红外等控制周围的设备(例如电视等)
检测用户国家
提供一些系统级别的设置及属性
磁盘统计服务,供dumpsys使用
用于管理全局显示生命周期,决定在已连接的物理设备如何配置逻辑显示,并且通知系统和应用状态的改变。
屏幕保护。
用于系统运行时日志的存储于管理。
用于观察设备状态,在设备空闲时执行维护任务。将一些比较耗时的代价比较高的任务放到设备空闲时执行,这样保证用户的体验。
以前在WindowManagerService中,现在独立了出来,用户处理事件分发。
输入法服务,打开和关闭输入法。
光感应传感器服务。
位置服务,GPS、定位等。
和锁屏界面中的输入密码,手势等安全功能有关。可以保存每个user的相关锁屏信息。
壁纸管理服务。
磁盘加载服务程序,一般要和一个linux daemon程序如vold/mountd等合作起作用,主要负责监听并广播device的mount/unmount/badremoval等等事件。
网络管理服务。ANDROID 系统网络连接和管理服务由四个系统服务ConnectivityService、NetworkPolicyManagerService、NetworkManagementService、NetworkStatsService共同配合完成网络连接和管理功能。ConnectivityService、NetworkPolicyManagerService、NetworkStatsService三个服务都通过INetworkManagementService接口跨进程访问NetworkManagementService服务,实现与网络接口的交互及信息读取。
33.NetworkPolicyManagerService
维护网络使用策略。
网络统计相关。
监视网络时间,当网络时间变化时更新本地时间。
通知服务。
网络服务搜索
打印服务。
电源管理服务。
身份识别相关。
用于耗时统计等。
搜索服务。
调度策略。
对串口的设备进行操作
状态栏。
提供电话注册、管理服务,可以获取电话的链接状态、信号强度等等。
文本服务,例如文本检查等。
指出用户当前所在位置是否为晚上,被UiModeManager等用来调整夜间模式。
管理当前Android设备的夜间模式和行车模式.。
USB Host和device管理服务。
振动器服务。
Wifi Direct服务。
Wifi服务。
监视手机和底座上的耳机