Android Service 小结

1 Service 是什么,有什么作用

Service 是不与用户交互,再后台运行的一个组件。因为是在后台运行,所以 Service 多用于处理耗时任务,或者需要在后台不被打扰的任务,如音乐播放、录音等等。

2 如何使用 Service

前面说了什么是 Service ,那我们来说说如何使用。

Service 的生命周期函数

  • onCreate() 方法,第一次被创建的时候调用,一般用来做初始化操作。
  • onBind() 方法,抽象函数,必须要实现。返回一个和服务通信的信道,一般用来获取 service 实例。
  • onStartCommand() 方法,接受传入的 Intent,需要注意的是不能做耗时的操作。
  • onDestory() 方法。Service 退出时候会调用,释放资源的操作一般在这里。

注册 service

首先每个组件都需要在清单文件 AndroidManifest.xml 中注册,Service 也不例外,Service 的注册可参考如下代码。

<manifest ... >
  ...
  <application ... >
      <service 
          android:name="packagename.DemoService"
          ... />
      ...
  </application>
</manifest>

启动 Service

然后是启动一个 Service ,启动的话,一般有 2 种方法。

  • 调用 startService( Intent intent ) 方法
  • 调用 bindService(Intent service, ServiceConnection conn, int flags)

这两种方式是有区别的,我们先说 startService() 方法。

startService() 启动方式

这种启动方式启动的 service 会在后台一直运行(忽略系统因内存不够等杀死Service的情况),直到调用了 stopService() 方法。所以 startService() 的时候需要注意要在合适的时候调用 stopService() 以释放内存。startService() 启动的时候,Service 的生命周期函数调用顺序是

onCreate() -> onStartCommand()

bindService() 启动方式。

bindService()方法启动的话,会通过 ServiceConnection 将 onBind() 返回的和 Service 通信的信道(IBinder)回调给调用方,调用方通过 IBinder 可以得到 Service,然后可以控制 Service。整个过程的生命周期函数调用如下:

onCreate()->onBind()->ServiceConnection 的方法回调

注: bindService() 方法需要的 onBind() 返回非空的 IBinder 。否则会绑定失败。

3 Service 保活的常用方法

1 提高进程优先级,在清单文件 intent-filter 中设置 android:priority,没试过,很多人说并不一定有效。

2 通过 startForeground 方法,将 Service 转变为前台进程。

3 在 startCommand() 方法返回 START_STICKY,这样系统杀死 Service 后会从新传 Intent ,从而有机会继续处理。但是短时间连续被杀死后,系统不会回传 Intent 。

4 在 onDestory() 方法里发送广播唤醒自己。

5 接收腾讯、淘宝等发出的广播 。

6 监听系统广播。

7 接入 小米push,华为push 等。

8 守护进程,没实际用过,据说5.0以后不好使,5.0 以后 jni 代码 fork 出来的进程不能作为守护进程。Android5.0 在应用退出后,ActivityManagerService不仅把主进程给杀死,另外把主进程所属的进程组一并杀死,这样一来,由于子进程和主进程在同一进程组,子进程在做的事情,也就停止了。但是有方法,点击跳转到大牛博客

暂时写到这里,如有错误,请告知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值