一、
Service的使用场景
Service在AndroidManifest.xml中的声明
Service定义好以后,需要在AndroidManifest.xml中声明。这其中有很多可以定义的属性值,android开发者官方文档【<service>:https://developer.android.google.cn/guide/topics/manifest/service-element.html】中有详细的介绍。其给出的可以设置的属性有:
1 <service android:description="string resource" 2 android:directBootAware=["true" | "false"] 3 android:enabled=["true" | "false"] 4 android:exported=["true" | "false"] 5 android:icon="drawable resource" 6 android:isolatedProcess=["true" | "false"] 7 android:label="string resource" 8 android:name="string" 9 android:permission="string" 10 android:process="string" > 11 . . . 12 </service>
其中有很多属性的含义,在笔者另外一篇文章【【朝花夕拾】四大组件之(一)Broadcast篇】第三节“广播的注册”的“静态注册中的属性简介”中介绍过,虽然是声明Broadcast Receiver的属性,但在Service中其含义基本上是一致的,这里就不赘述了。这里仅介绍一下之前没有介绍过的属性含义,主要是翻译官网中的内容并做一些补充。
1、android:description
它是一个向用户描述该service的字符串。它应该被设置为对字符串资源的引用,使得它能够像其它用户界面中字符串那样本地化。
2、android:isolatedProcess
如果被设置为true,该service将运行在一个特殊的进程中,该进程独立于系统的其他进成并且没有自己的权限。和该service通信的唯一方式就是 Servcie API(binding和starting)。
3、android:process
这个属性在前面提到的广播篇中翻译过,这里补充说明一些内容。如果该进程以“:”打头,那么它的意思是指要在当前进程名称前面附加上当前的包名,如“:remote”表示当前进程为“packageName:remote”,它是当前app进程私有的一个进程,其他App的组件就不能和它运行在一个进程中。而如果以小写字母打头,如“com.remote”(官方文档中说命名规范中要求必须要含有".",否则会报错),则表示该进程名为“com.remote”,是一个全局进程,可以让不同app中的不同组件共享这个进程。
对于如何正确使用多进程,为什么要用多进程,使用多进程有什么陷阱,在博文【Android多进程总结一:生成多进程(android:process属性)—https://blog.csdn.net/lixpjita39/article/details/77435156】中有更多的讲解,另外该篇文章所参考的文章也值得一读。
Service的启动方式
Service生命周期
IntentService
Service工作线程
Service跨进程通信
Service与子线程
Service处理耗时操作
https://blog.csdn.net/javazejian/article/details/52709857
https://www.jianshu.com/p/95ec2a23f300
https://developer.android.google.cn/reference/android/app/Service.html