Service的启动方式
1,startService
生命周期:startService->onCreate()->onStartCommon()->stopService-onDestory()
多次调用Service时,service没有启动时,会走onCreate,后续则会多次走onStartCommon方法,最后调用stopService或StopSelf时,则会停止
特点:startService方式启动不受当前启动对象控制(面试某大厂时,面试官解释的)
2,bindService
生命周期:bindService->onCreate()->onBind()->unBindService->unBind()->onDestory
通过BindService的方式,在使用时要实现ServiceConnection 获得Service中的IBinder对象,通过IBinder可以获得服务端的回调,调用Service中的方法,一个Client多次绑定onBind只会走一次,但一个Service可以被多个Client进行绑定
特点:绑定后受当前Activity生命周期影响,受控制(大厂面试官解释的)
二 关于IntentService的使用
1,使用IntentService时,能提升应用的优先级,减少应用退出后台时被kill掉的几率
2,IntentService中内部有一个HandleThread线程,可以处理一些耗时的操作
3,使用IntentService时,当任务处理完后,会自动终止
4,当多次调用startService时,耗时任务会放在任务队列里,一个个执行
注意事项
IntentService,启动时,建议不要使用BindService的方式启动,因为Bind方式启动时,不会走onStartCommon,方法,就会导致无法触发onHandleIntent的回调
三,提升Service的优先级和进程优先级
1,在配置清单中注册Service时添加 priority=1000则为最高优先级
2,在onStartCommon中添加startForceground,同时在onDestroy中添加stopForceground方法
3,在onStartCommon中的return方法中返回的flag设置为START_STICKY
四,Service的保活方式
在Service的onDestroy中重启当前Service
在onStartCommon中修改返回值为START_STICKY 只有在内存不足被系统回收时才有可能被调用
使用前台服务提升应用的优先级,防止内存不足被杀掉
开启进程守护,互相唤醒,互相启动
监听系统广播,启动Service
设置成系统权限,
设置应用的白名单
网友评论