Android入门篇(七) Service生命周期

前面讲完了四大组件中的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生命周期

这里进行测试this

  • 经过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);
    }

    首次启动servicecode

    04-25 21:55:17.525 1263-1263/com.isdust.zor.view_learn D/FirstService: onCreate
    04-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依然运行。it

  • BindService方式

bindservice时class

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

能够看到首次bind时,只是调用了onCreate和onBind后台

unbindService时service

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

能够看到,依次调用了onUnbind和onDestroy

相关文章
相关标签/搜索