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

相關文章
相關標籤/搜索