美文网首页Android 基础
Android 四大组件之 Service

Android 四大组件之 Service

作者: Kevin_小飞象 | 来源:发表于2019-01-31 15:56 被阅读2次

本地服务

调用者和 Service 在同一个进程里,所以运行在主进程的 main 线程中。所以不能进行耗时操作,可以采用在 Service 里面创建一个 Thread 来执行任务。
任何 Activity 都可以控制同一个 Service,而系统也只会创建一个对应 Service 的实例。

启动方式

1、通过 start 方式开启服务

步骤:
1,定义一个类继承 Service;
2,清单文件中注册 Service;(必须)
3,使用 Context 的 startService(Intent) 方法启动服务;
4,不再使用时,记得调用 stopService(Intent) 方法停止服务。

生命周期:
onCreate() -- > onStartCommand() -- > onDestory()
注意:如果服务已经开启,不会重复回调 onCreate() 方法。如果再次调用 context.startService() 方法,Service 会调用 onStart() 或者 onStartCommand() 方法。停止服务需要调用context.stopService() 方法,服务停止的时候回调 onDestory() 被销毁。

特点:
一旦服务开启就跟调用者没有任何关系了。调用者退出了,调用者挂了,服务还在后台长期的运行,调用者不能调用服务里面的方法。

2、通过 bind 方式开启服务

步骤:
1,定义一个类继承 Service ;
2,在清单文件中注册 Service ;(必须)
3,使用 context 的 bindService(Intent,ServiceConnection,int) 方法启动服务;
4,不再使用时,调用 unBindService(ServiceConnection) 方法停止该服务。

生命周期:
onCreate() -- > onBind() --> onUnbind() -- > onDestory()
注意:绑定服务不会调用 onStart() 或者 onStartCommand() 方法

特点:bind 的方式开启服务,绑定服务,绑定者挂了,服务也会跟着挂掉。绑定者可以调用服务里面的方法。

远程服务

调用者和 Service 不在同一个进程中,Service 在单独的进程中的 main 线程,是一种跨进程通信方式。参考

IntentService

IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。
特征:

  • 会创建独立的 worker 线程来处理所有的 Intent 请求;
  • 会创建独立的 worker 线程来处理 onHandleIntent() 方法实现的代码,无需处理多线程问题;
  • 所有请求处理完成后,IntentService 会自动停止,无需调用 stopSelf() 方法停止 Service;
  • 为 Service 的 onBind() 提供默认实现,返回null;
  • 为 Service 的 onStartCommand() 提供默认实现,将请求 Intent 添加到队列中;

相关文章

网友评论

    本文标题:Android 四大组件之 Service

    本文链接:https://www.haomeiwen.com/subject/uqjsjqtx.html