【朝花夕拾】四大组件之(二)Service篇

一、

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

猜你喜欢

转载自www.cnblogs.com/andy-songwei/p/10422123.html