深蓝互联专注深圳物联网方案开发定制、小程序开发、SaaS系统、APP开发和深圳软硬件方案公司欢迎咨询邮箱:wisepu@szdbi.com   电话:13530005652   联系我们   |   网站地图   



监听应用程序的生命周期-ProcessLifecycleOwner

来源:     发布:     点击:

很多时候,我们都会遇到这样的需求:我们想要知道,应用程序当前是否处在前台还是后台,或者我们希望应用程序从后台回到前台时,能够得到通知。有不少方法能够实现该需求,但是都不够好。在此之前,Google官方并没有提供该需求的实现,直到LifeCycle的出现。LifeCycle提供了一个名为ProcessLifecycleOwner的类,使得我们能够方便地知道整个应用程序的生命周期情况。


ProcessLifecycleOwner的使用方式与Activity/Fragment,以及Service是类似的,它也是通过观察者模式来实现的。由于我们要观察的是整个应用程序,所以我们要在Application中进行相关的代码编写。

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

接下去就是ApplicationObserver类,我们定义这个类来实现LifecycleObserver接口,负责对应用程序生命周期的监听。

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

    public ApplicationObserver()
    {

    }

    /**
     * ON_CREATE 在应用程序的整个生命周期中只会被调用一次
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate()
    {
        Log.d(TAG, "Lifecycle.Event.ON_CREATE");
    }

    /**
     * 应用程序出现到前台时调用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart()
    {
        Log.d(TAG, "Lifecycle.Event.ON_START");
    }

    /**
     * 应用程序出现到前台时调用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume()
    {
        Log.d(TAG, "Lifecycle.Event.ON_RESUME");
    }

    /**
     * 应用程序退出到后台时调用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause()
    {
        Log.d(TAG, "Lifecycle.Event.ON_PAUSE");
    }

    /**
     * 应用程序退出到后台时调用
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop()
    {
        Log.d(TAG, "Lifecycle.Event.ON_STOP");
    }

    /**
     * 永远不会被调用到,系统不会分发调用ON_DESTROY事件
     * */
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy()
    {
        Log.d(TAG, "Lifecycle.Event.ON_DESTROY");
    }
}

ProcessLifecycleOwner针对的是整个应用程序的监听,与你的Activity数量无关,你有一个Activity和N个Activity,对ProcessLifecycleOwner来说是没有区别的。

Lifecycle.Event.ON_CREATE只会被调用一次,而Lifecycle.Event.ON_DESTROY永远不会被调用。

当应用程序从后台回到前台,或者应用程序首次打开,会依次调用Lifecycle.Event.ON_STARTLifecycle.Event.ON_RESUME

当应用程序从前台退到后台(用户按下home键或任务菜单键),会依次调用Lifecycle.Event.ON_PAUSELifecycle.Event.ON_STOP。需要注意的是,这两个方法的调用会有一定的延后,因为系统需要为屏幕旋转,配置发生变化导致Activity重新创建预留一些时间,也就是说,系统需要保证由于屏幕旋转,导致Activity重新创建时,这两个事件不会被调用到。旋转屏幕,你的应用程序并没有退到后台,它只是进入了横/竖屏模式而已。

通过ProcessLifecycleOwner,我们可以知道应用程序何时退到后台,以及何时进入前台,进而执行一些业务操作。它使用起来非常简单,并且不会给项目增加任何的耦合度。

深蓝互联成立于2013年,是一家物联网硬件开发及软件应用服务商,获得多次获得国家高新技术企业资质的企业。深蓝互联专注软硬件技术开发的专业性技术公司。我们从事软硬件开发十年,擅长SaaS 平台开发、APP小程序开发、软硬件结合开发,在视觉识别处理、数据架构、云计算、多线程高并发和集群、数据安全加密和防护方便有很深的技术积累。

 

我们拥有专业优秀的设计和技术团队,以极具创意的 UI 设计、精湛卓越的开发技术,专业的网络策划团队。公司多年来投入打造物联网SaaS平台,集成了公司研发的多款智能物联网终端(智能鲜米机、生鲜售货机、自助洗车机、小区电瓶车充电系统等)。

 

公司一直坚持以研发为导向,打造软硬件结合的物联网平台系统。将一直坚持提高开发的技术实力更好的为我们的客户服务!

 

文章来自深蓝互联http://www.szdbi.com/webxt/288.html转载请注明出处!

相关文章

无相关信息


深圳市龙华新区龙观西路2号宝龙大厦A903(与布龙路交汇处)