无码人妻精一区二区三区,eeuss影院www在线观看,无码精品久久久久久人妻中字,日韩av高清在线看片

推薦新聞
監(jiān)聽應(yīng)用程序的生命周期-ProcessLifecycleOwner
發(fā)布者:深藍互聯(lián)
發(fā)布時間:2019-08-06
點擊:次

很多時候,我們都會遇到這樣的需求:我們想要知道,應(yīng)用程序當前是否處在前臺還是后臺,或者我們希望應(yīng)用程序從后臺回到前臺時,能夠得到通知。有不少方法能夠?qū)崿F(xiàn)該需求,但是都不夠好。在此之前,Google官方并沒有提供該需求的實現(xiàn),直到LifeCycle的出現(xiàn)。LifeCycle提供了一個名為ProcessLifecycleOwner的類,使得我們能夠方便地知道整個應(yīng)用程序的生命周期情況。


ProcessLifecycleOwner的使用方式與Activity/Fragment,以及Service是類似的,它也是通過觀察者模式來實現(xiàn)的。由于我們要觀察的是整個應(yīng)用程序,所以我們要在Application中進行相關(guān)的代碼編寫。

public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
    }
}

接下去就是ApplicationObserver類,我們定義這個類來實現(xiàn)LifecycleObserver接口,負責(zé)對應(yīng)用程序生命周期的監(jiān)聽。

public class ApplicationObserver implements LifecycleObserver
{
    private String TAG = this.getClass().getName();

    public ApplicationObserver()
    {

    }

    /**
     * ON_CREATE 在應(yīng)用程序的整個生命周期中只會被調(diào)用一次
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate()
    {
        Log.d(TAG, "Lifecycle.Event.ON_CREATE");
    }

    /**
     * 應(yīng)用程序出現(xiàn)到前臺時調(diào)用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart()
    {
        Log.d(TAG, "Lifecycle.Event.ON_START");
    }

    /**
     * 應(yīng)用程序出現(xiàn)到前臺時調(diào)用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume()
    {
        Log.d(TAG, "Lifecycle.Event.ON_RESUME");
    }

    /**
     * 應(yīng)用程序退出到后臺時調(diào)用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause()
    {
        Log.d(TAG, "Lifecycle.Event.ON_PAUSE");
    }

    /**
     * 應(yīng)用程序退出到后臺時調(diào)用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop()
    {
        Log.d(TAG, "Lifecycle.Event.ON_STOP");
    }

    /**
     * 永遠不會被調(diào)用到,系統(tǒng)不會分發(fā)調(diào)用ON_DESTROY事件
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy()
    {
        Log.d(TAG, "Lifecycle.Event.ON_DESTROY");
    }
}

ProcessLifecycleOwner針對的是整個應(yīng)用程序的監(jiān)聽,與你的Activity數(shù)量無關(guān),你有一個Activity和N個Activity,對ProcessLifecycleOwner來說是沒有區(qū)別的。

Lifecycle.Event.ON_CREATE只會被調(diào)用一次,而Lifecycle.Event.ON_DESTROY永遠不會被調(diào)用。

當應(yīng)用程序從后臺回到前臺,或者應(yīng)用程序首次打開,會依次調(diào)用Lifecycle.Event.ON_START,Lifecycle.Event.ON_RESUME。

當應(yīng)用程序從前臺退到后臺(用戶按下home鍵或任務(wù)菜單鍵),會依次調(diào)用Lifecycle.Event.ON_PAUSE,Lifecycle.Event.ON_STOP。需要注意的是,這兩個方法的調(diào)用會有一定的延后,因為系統(tǒng)需要為屏幕旋轉(zhuǎn),配置發(fā)生變化導(dǎo)致Activity重新創(chuàng)建預(yù)留一些時間,也就是說,系統(tǒng)需要保證由于屏幕旋轉(zhuǎn),導(dǎo)致Activity重新創(chuàng)建時,這兩個事件不會被調(diào)用到。旋轉(zhuǎn)屏幕,你的應(yīng)用程序并沒有退到后臺,它只是進入了橫/豎屏模式而已。

通過ProcessLifecycleOwner,我們可以知道應(yīng)用程序何時退到后臺,以及何時進入前臺,進而執(zhí)行一些業(yè)務(wù)操作。它使用起來非常簡單,并且不會給項目增加任何的耦合度。

 

關(guān)注深藍互聯(lián)公眾號
Copyright ? 2013-2025 深藍互聯(lián) 版權(quán)所有
友情鏈接: