Android检查应用是否已关闭

Android检查应用是否已关闭,第1张

概述我有一个Android应用程序,我需要一个功能或任何广播接收器,可以检查应用程序是否关闭..我不需要在每个活动中调用销毁(应用程序中有大约20个活动)我试图在Application类中添加此函数publicclassApplicationLifeCycleManagerimplementsActivityLifecycleCallbacks{/**Man

我有一个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检查应用是否已关闭所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1101690.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存