2022年3月11日 星期五

Android Studio - Service 生命週期(Service Lifecycle)使用(六十二)

Android Studio - Service 生命週期(Service Lifecycle)使用(六十二):

Service(服務)是 Android 應用程式提供的一個執行背景程式而不需與使用者互動的元件,Service 像 Activity一樣,一個 Service 也有生命週期方法,可以執行監視它的狀態改變。但是比 Activity 的生命週期方法少,只有三個且它們是公有的(public)而不是受保護的(protected)。
主要介紹內部調用方法和外部調用方法的關係。

startService() - 啟動 Service 服務,onCreate()→onStartCommand()→onDestroty
手動調用 startService() 後,自動調用內部方法:onCreate()、onStartCommand()
startService() - 啟動 Service 服務週期

stopService() - 關閉 Service 服務
手動調用 stopService() 後,自動調用內部方法:onDestory()
stopService() - 關閉 Service 服務週期

bindService() - 綁定 Service 服務,onCreate()→onBind()→onUnBind()→onDestroty
手動調用 bindService() 後,自動調用內部方法:onCreate()、onBind()
bindService() - 綁定 Service 服務週期

unbindService() - 解綁 Service 服務,onCreate()→onBind()→onUnBind()→onDestroty
手動調用 unbindService() 後,自動調用內部方法:onCreate()、onBind()、onDestory()
unbindService() - 解綁 Service 服務週期
4 個手動調用的方法:

手動調用方法

作用

startService()

啟動服務

stopService()

關閉服務

bindService()

綁定服務

unbindService()

解綁服務


5 個內部自動調用的方法:

內部自動調用的方法

作用

onCreat()

創建服務

onStartCommand()

開始服務

onDestroy()

銷燬服務

onBind()

綁定服務

onUnbind()

解綁服務


5 個內部自動調用的方法:

回檔

描述

onStartCommand()

系統調用此方法當另一元件,如一個活動,通過調用startService()要求該服務啟動。如果要實現方法,它工作完成後停止服務,通過調用stopSelf()stopService()方法。

onBind()

該系統調用這個方法當其他元件要通過調用bindService()綁定服務。如果實現此方法,必須提供用戶端與服務進行通信,通過返回一個IBinder物件的介面。必須實現此方法,但如果不希望被綁定,那麼應該返回null

onUnbind()

系統調用此方法,當所有客戶都從服務發佈的特定介面斷開。

onRebind()

該系統調用這個方法時,新的用戶端已連接到服務,它事先未通知,所有已經上解除綁定後(意向)斷開它。

onCreate()

該系統調用時,使用onStartCommand()onBind()首先創建的服務這個方法。此調用需要執行一次性安裝。

onDestroy()

系統調用這個方法當服務不再使用(被銷毀)。服務應該實現這個用於清理,如執行緒,註冊的偵聽器,接收器等任何資源


Service(服務)範例:

public class ExampleService extends Service {

    int startMode;       // indicates how to behave if the service is killed

    IBinder binder;      // interface for clients that bind

    boolean allowRebind; // indicates whether onRebind should be used

 

    @Override

    public void onCreate() {

        // The service is being created

    }

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

        // The service is starting, due to a call to startService()

        return mStartMode;

    }

    @Override

    public IBinder onBind(Intent intent) {

        // A client is binding to the service with bindService()

        return mBinder;

    }

    @Override

    public boolean onUnbind(Intent intent) {

        // All clients have unbound with unbindService()

        return mAllowRebind;

    }

    @Override

    public void onRebind(Intent intent) {

        // A client is binding to the service with bindService(),

        // after onUnbind() has already been called

    }

    @Override

    public void onDestroy() {

        // The service is no longer used and is being destroyed

    }

}


2022年 3月 11日(Fri)天氣報告
氣溫:40.0°F / 4.0°C @ 07:00
風速:每小時 2公里
降雨機會:4%
相對濕度:百分之 69%
天氣:多雲

沒有留言:

張貼留言