
我有一个Android应用程序,我需要一个功能或任何广播接收器,可以检查应用程序是否关闭..我不需要在每个活动中调用销毁(应用程序中有大约20个活动)
我试图在Application类中添加此函数
public class ApplicationlifeCycleManager implements ActivitylifecycleCallbacks {/** Manages the state of opened vs closed activitIEs, should be 0 or 1. * It will be 2 if this value is checked between activity B onStart() and * activity A onStop(). * It Could be greater if the top activitIEs are not fullscreen or have * transparent backgrounds. */private static int visibleActivityCount = 0;/** Manages the state of opened vs closed activitIEs, should be 0 or 1 * because only one can be in foreground at a time. It will be 2 if this * value is checked between activity B onResume() and activity A onPause(). */private static int foregroundActivityCount = 0;/** Returns true if app has foreground */public static boolean isAppInForeground(){ return foregroundActivityCount > 0;}/** Returns true if any activity of app is visible (or device is sleep when * an activity was visible) */public static boolean isAppVisible(){ return visibleActivityCount > 0;}public voID onActivityCreated(Activity activity, Bundle bundle) {}public voID onActivityDestroyed(Activity activity) { Log.wtf("destroyed","app closed!!");}public voID onActivityResumed(Activity activity) { foregroundActivityCount ++;}public voID onActivityPaused(Activity activity) { foregroundActivityCount --;}public voID onActivitySaveInstanceState(Activity activity, Bundle outState) {}public voID onActivityStarted(Activity activity) { visibleActivityCount ++;}public voID onActivityStopped(Activity activity) { visibleActivityCount --;}}我也在Application类中注册了
@OverrIDepublic voID onCreate() { super.onCreate(); registeractivitylifecycleCallbacks(new ApplicationlifeCycleManager());}但是当我在activity之间切换时会调用onPaused和onResumed以及onDestroyed函数:因为它检测是否有任何活动被关闭或被破坏甚至恢复
所以任何解决方案来检查应用程序是否在一个功能中关闭?
解决方法:
此答案使用ProcessLifecycleOwner来检测应用程序可见性.
这是Android Architecture Component的一部分.
1.将此lib添加到您的项目中
实现“androID.arch.lifecycle:extensions:1.1.1”
2.扩展实现lifecycleObserver的应用程序类
public class AppController extends Application implements lifecycleObserver {/////////////////////////////////////////////// @OnlifecycleEvent(lifecycle.Event.ON_START) public voID onEnterForeground() { Log.d("AppController", "Foreground"); isAppInBackground(false); } @OnlifecycleEvent(lifecycle.Event.ON_Stop) public voID onEnterBackground() { Log.d("AppController", "Background"); isAppInBackground(true); }/////////////////////////////////////////////// // Adding some callbacks for test and log public interface Valuechangelistener { voID onChanged(Boolean value); } private Valuechangelistener visibilitychangelistener; public voID setonVisibilitychangelistener(Valuechangelistener Listener) { this.visibilitychangelistener = Listener; } private voID isAppInBackground(Boolean isBackground) { if (null != visibilitychangelistener) { visibilitychangelistener.onChanged(isBackground); } } private static AppController mInstance; public static AppController getInstance() { return mInstance; } @OverrIDe public voID onCreate() { super.onCreate(); mInstance = this; // addobserver ProcesslifecycleOwner.get().getlifecycle().addobserver(this); }}并像这样使用它:
AppController.getInstance().setonVisibilitychangelistener(new Valuechangelistener() { @OverrIDe public voID onChanged(Boolean value) { Log.d("isAppInBackground", String.valueOf(value)); }});不要忘记将应用程序名称添加到清单中
<application androID:name="myPackagename.AppController" androID:icon="@mipmap/ic_launcher" androID:label="@string/app_name"">完成.
(Kotlin例子)
https://github.com/jshvarts/AppLifecycleDemo
总结以上是内存溢出为你收集整理的Android检查应用是否已关闭全部内容,希望文章能够帮你解决Android检查应用是否已关闭所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)