博客 / 詳情

返回

Android 中的服務

1. 普通方式啓動服務

即調用 startService, 依次執行 onCreate、onStartCommand 方法, 調用 stopService 方法停止服務時, 執行 onDestroy 方法。

2. 綁定啓動方式

  • 立即綁定
    bindService, 依次執行 onCreate、onBind、onServiceConnected, 解綁執行: unBind、onDestroy
  • 延遲綁定, 即普通方式啓動服務之後,再執行綁定,
    bindService 依次執行 onBind、onServiceConnected、onUnbind(解綁執行) 或 onRebind、onUnbind(解綁執行)

note:

  1. 當 onUnbind 返回 false 時,onBind、unBind 只會調一次。
  2. 當 onUnbind 返回 true 時,第一次走: onBind、unBind, 第二次走: onRebind、onUnbind, 第三次、第N次同第二次。3. 當 targetSdkVersion < 5(Build.VERSION_CODES.ECLAIR) 時, onStartCommand 返回START_STICKY_COMPATIBILITY, 否則返回 START_STICKY
  3. 當以普通方式啓動服務後,再讓應用進入後台,一分鐘後,服務可能自動執行 onDestroy
  4. onServiceDisconnected 不會在 unbindService 時回調,和 onServiceConnected 不是嚴格對應的unbindService 調用後,客户端代碼仍然通過緩衝的 binder 引用調用服務端代碼
  5. 多次調用 startService, 會多次執行 onStartCommand, 但實際上每個服務只有一個實例, 只需要一次 stopService 即可
  6. 如果一個服務即被 startService, 也被 bindService,必須調用 stopService, unbindService 之後, onDestroy 才會觸發。
  7. 服務在應用進入後台後被銷燬後是否能恢復?
    START_STICKY:系統會在內存可用時嘗試重新創建服務。實際中並不一定 !!!建議使用 WorkManager
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.