很多时候,我们都会遇到这样的需求:我们想要知道,应用程序当前是否处在前台还是后台,或者我们希望应用程序从后台回到前台时,能够得到通知。有不少方法能够实现该需求,但是都不够好。在此之前,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_START,Lifecycle.Event.ON_RESUME。
当应用程序从前台退到后台(用户按下home键或任务菜单键),会依次调用Lifecycle.Event.ON_PAUSE,Lifecycle.Event.ON_STOP。需要注意的是,这两个方法的调用会有一定的延后,因为系统需要为屏幕旋转,配置发生变化导致Activity重新创建预留一些时间,也就是说,系统需要保证由于屏幕旋转,导致Activity重新创建时,这两个事件不会被调用到。旋转屏幕,你的应用程序并没有退到后台,它只是进入了横/竖屏模式而已。
通过ProcessLifecycleOwner,我们可以知道应用程序何时退到后台,以及何时进入前台,进而执行一些业务操作。它使用起来非常简单,并且不会给项目增加任何的耦合度。
深蓝互联成立于2013年,是一家物联网硬件开发及软件应用服务商,获得多次获得国家高新技术企业资质的企业。深蓝互联专注软硬件技术开发的专业性技术公司。我们从事软硬件开发十年,擅长SaaS 平台开发、APP小程序开发、软硬件结合开发,在视觉识别处理、数据架构、云计算、多线程高并发和集群、数据安全加密和防护方便有很深的技术积累。
我们拥有专业优秀的设计和技术团队,以极具创意的 UI 设计、精湛卓越的开发技术,专业的网络策划团队。公司多年来投入打造物联网SaaS平台,集成了公司研发的多款智能物联网终端(智能鲜米机、生鲜售货机、自助洗车机、小区电瓶车充电系统等)。
公司一直坚持以研发为导向,打造软硬件结合的物联网平台系统。将一直坚持提高开发的技术实力更好的为我们的客户服务!
文章来自深蓝互联http://www.szdbi.com/webxt/288.html转载请注明出处!