您的位置:首页 > 其它

浅谈Service

2018-02-28 20:30 127 查看
     start方式启动服务:
         生命周期:onCreate()-->onStartCommand()-->onDestory()    

         特点:开启服务后服务与开启者无关,开启者不可以调用服务的方法

     bind方式启动服务:
         生命周期:onCreate()--》onBind()--》onUnBind()--》onDestory()
          特点:开启服务后,服务与开启者同生共死 ,而且开启者还可以调用服务里的方法
   
无论通过那种方式启动 Service(start、bind、start & bind),任何组件(甚至其他应用的组件)都可以使用 Service。并通过 Intent 传递参数。当然,你也可以将 Service 在
AndroidMenifest.xml
文件中配置成私有的,不允许其他应用访问。
android:exported
 属性设为 false,表示不允许其他应用程序启动本应用的组件,即便是显式 Intent 也不行(even when using an explicit intent)。

Service 的 onCreate() 可以执行耗时操作吗?

   不可以 ,因为四大组件是运行在主线程的。所以不能进行耗时操作。

那么在Service中如何执行耗时操作?

       第一想法肯定是new Thread(),还可以使用 
AysncTask
 或 
HandlerThread
 来替代 Thread 创建线程。

还有一种有意思的方式就是IntentService。
   IntentService继承service。

IntentService
继承于
Service
,若 Service 不需要同时处理多个请求,那么使用
IntentService
将是最好选择。你只需要重写
onHandleIntent()
方法,该方法接收一个回调的 Intent 参数,你可以在方法内进行耗时操作,因为它默认开启了一个子线程,操作执行完成后也无需手动调用
stopSelf()
方法,
onHandleIntent()
将会自动调用该方法。
使用 IntentService 的要点如下:
默认在子线程中处理回传到
onStartCommand()
方法中的 Intent;
在重写的
onHandleIntent()
方法中处理按时间排序的 Intent 队列,所以不用担心多线程(multi-threading)带来的问题。
当所有请求处理完成后,自动停止 Service,无需手动调用
stopSelf()
方法;
默认实现了
onBind()
方法,并返回 null;
默认实现了
onStartCommand()
方法,并将回传的 Intent 以序列的形式发送给
onHandleIntent()
,您只需重写该方法并处理 Intent 即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: