总结下相关的知识点吧,证明下自己还活着。
来张总结图:
service相关.jpg
生命周期
service生命周期的经历三个过程:创建->开始->销毁;两种启动方式来说明生命周期:
startService()->stopService():
- 服务只创建一次,销毁一次,但是可以开始多次;
- 多次点击startService(),onCreate()只会调用一次,onStartCommand()会调用多次,多次点击stopService(),onDestroy()也只调用一次;
(onCreate()->onStartCommand()->onStartCommand()...->onDestroy) - 不调用stopService()停止服务,退出应用,服务还在,手动和内存不足等原因被杀死后,再次启动应用,自动启动服务;(该服务随Android系统的启动而启动,随Android系统的关闭或调用stopService方法后服务才停止)
bindService()->unbindService():
- 但有时我们希望Service随Activity关闭服务后自动关闭,需要将Activity和Service绑定;
- onCreate()->onBind()->onUnBind()->onDestroy();
多进程实现
1、进程实现
<pre>
<service
android:name=".service.MyService"
android:enabled="true"
android:exported="false"
android:process=":remote" />
</pre>
指定为远程服务后,再操作以上步骤,以bind方式启动就会出现崩溃,毕竟Activity和Service运行在不同的进程中,不能以这样的方式再建立关联;
2、跨进程通信:AIDL(Android Interface Definition Language)
Android系统进程之间不能共享内存,AIDL机制可以使不同进程之间进行通信;
具体实现不再叙述,网上有很多都很清楚的叙述了相关的步骤。主要的目的还是能够让多个应用程序共享一个服务功能。
以上总结:
1. 后台运行:service服务在不显示界面的前提下在后台运行指定的任务,这样不影响用户做其他事情;
2. 注意:service任然是运行在主线程中的,一些耗时的任务还是需要开启子线程去处理;
3. 跨进程服务:实现不同进程间通信;
问题:说到多进程,不得不提进程优先级?进程如何保活?
进程优先级?进程如何保活?
待研究。。。
IntentService
一个基于Service类,处理异步请求,处理完成后自动停止服务。
Hongyang的博客:http://blog.csdn.net/lmj623565791/article/details/47143563
网友评论