博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android入门篇(七) Service生命周期
阅读量:6243 次
发布时间:2019-06-22

本文共 2249 字,大约阅读时间需要 7 分钟。

前面讲完了四大组件中的Activity,这里在讲解一下另一个重要的的组件Service。Service常见的场景可以应用于后台应用的下载,或者是后台的轮询操作。后台执行一些耗时的操作。

Service的启动

service启动的方式主要有两种:

  1. startService启动service
  2. bindService启动service

两种启动方式的区别:

  1. startService启动Service
  • 首次启动会创建一个Service实例,依次调用onCreate()和onStartCommand()方法,此时Service 进入运行状态,如果再次调用StartService启动Service,将不会再创建新的Service对象, 系统会直接复用前面创建的Service对象,调用它的onStartCommand()方法!
  • Service与它的调用者无必然的联系,就是说当调用者结束了自己的生命周期, 但是只要不调用stopService,那么Service还是会继续运行的!
  • 无论启动了多少次Service,只需调用一次StopService即可停掉Service
  1. BindService启动Service
  • 当首次使用bindService绑定一个Service时,系统会实例化一个Service实例,并调用其onCreate()和onBind()方法,然后调用者就可以通过IBinder和Service进行交互,此后如果再次使用bindService绑定Service,系统不会创建新的Sevice实例,也不会再调用onBind()方法,只会直接把IBinder对象传递给其他后来增加的客户端!
  • 如果我们解除与服务的绑定,只需调用unbindService(),此时onUnbind和onDestory方法将会被调用!这是一个客户端的情况,假如是多个客户端绑定同一个Service的话,情况如下 当一个客户完成和service之间的互动后,它调用 unbindService() 方法来解除绑定。当所有的客户端都和service解除绑定后,系统会销毁service。(除非service也被startService()方法开启)
  • bindService模式下的Service是与调用者相互关联的,在bindService后,一旦调用者销毁,那么Service也立即终止!

Service生命周期

这里进行测试

  • 通过startService方式启动

    public void start(View view) {      Intent intent = new Intent(SecondActivity.this, FirstService.class);      startService(intent);}public void stop(View view) {    Intent intent = new Intent(SecondActivity.this, FirstService.class);    stopService(intent);}

    首次启动service

    04-25 21:55:17.525 1263-1263/com.isdust.zor.view_learn D/FirstService: onCreate04-25 21:55:17.525 1263-1263/com.isdust.zor.view_learn D/FirstService: onStartCommand

    从日志中可以看出,当start依次调用了oncreate和onStartCommand

    第二次启动service

    `04-25 22:00:34.075 1263-1263/com.isdust.zor.view_learn D/FirstService: onStartCommand

`

这里可以视为两次启动了service,看一下stopservice的情况
04-25 22:04:37.325 1263-1263/com.isdust.zor.view_learn D/FirstService: onDestroy
可以看到只调用了依次destory,因此,可以明确的看出service不会生成多次
这种情况下,service和activity没有必然的联系。当activitydestroy后,service依然运行。

  • BindService方式

bindservice时

04-25 22:10:43.005 1263-1263/com.isdust.zor.view_learn D/FirstService: onCreate04-25 22:10:43.005 1263-1263/com.isdust.zor.view_learn D/FirstService: onBind

可以看到首次bind时,只是调用了onCreate和onBind

unbindService时

04-25 22:20:43.565 1929-1929/com.isdust.zor.view_learn D/FirstService: onUnbind04-25 22:20:43.565 1929-1929/com.isdust.zor.view_learn D/FirstService: onDestroy

可以看到,依次调用了onUnbind和onDestroy

转载地址:http://qxpia.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
nginx+django+uwsgi部署配置
查看>>
关于HWM的一些测试
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
以太坊中的gas、gas price、gas limit到底是什么
查看>>
用户配置文件服务登录失败。无法加载用户配置文件
查看>>
com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
查看>>
我的友情链接
查看>>
四则运算法则表延伸 - 工厂方法模式
查看>>
我的友情链接
查看>>
话里话外:企业管理的五个层次
查看>>
Hazelcast集群服务(3)
查看>>
研究人员创建可***BIOS和网卡的恶意软件
查看>>
C++ numeric_limits的用法
查看>>
升级maildrop,解决自动回复乱码问题
查看>>
MySQL Sandbox---快速体验各版本MySQL
查看>>
我的友情链接
查看>>
CentOS安装KDE和Gnome
查看>>
非常有趣的js
查看>>