Android 前台后台切换检测之Jetpack Lifecycle

前言

这篇文章主要介绍使用Jetpack套件中的Lifecycle检测自身APP前台后台切换,主要用于实现当自身APP切换到后台时显示悬浮窗,回到APP时关闭悬浮窗

Lifecycle套件

优点:简单稳定,不需要权限,由Google官方出品,有保障
缺点:在使用中我只发现一个问题,如果第三方APP启动的Activity带有windowIsTranslucent=true 属性,这个时候Lifecycle是检测不到自身APP被切换后台的

你们在正常开发中应该是不会遇到的,我是在做桌面APP发现的,启动某些第三方APP时居然没有触发Lifecycle的回调,结果一查就是上述问题。

如果想要检测到带有windowIsTranslucent=true属性的Activity启动,我另一篇文章有提供检测方法:Android获取前台运行应用包名UsageStatsManager和ActivityManager结合
非必要不建议使用,这个检测方法需要多申请一个权限(麻烦),按你们项目需求合理实现即可

好了,废话说完,上代码:

使用方法

app/build.gradle 中添加:

dependencies {

/***/

implementation "androidx.lifecycle:lifecycle-process:2.6.0-alpha02"
implementation "androidx.lifecycle:lifecycle-common-java8:2.6.0-alpha02"
}

新建一个ProcessLifecycleObserver类实现DefaultLifecycleObserver接口

public class ProcessLifecycleObserver implements DefaultLifecycleObserver {

    private Callback callback;

    public ProcessLifecycleObserver(Callback callback) {
        this.callback = callback;
    }

    @Override
    public void onStart(@NonNull LifecycleOwner owner) {
        if (callback != null) {
            callback.onAppForeground();
        }
    }

    @Override
    public void onStop(@NonNull LifecycleOwner owner) {
        if (callback != null) {
            callback.onAppBackground();
        }
    }

    @Override
    public void onDestroy(@NonNull LifecycleOwner owner) {
        callback = null;
    }

    public interface Callback {

        void onAppBackground();

        void onAppForeground();
    }

}

在Activity中这样使用:

public class MainActivity extends AppCompatActivity implements  ProcessLifecycleObserver.Callback {

    private final ProcessLifecycleObserver processLifecycleObserver = new ProcessLifecycleObserver(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         ProcessLifecycleOwner.get().getLifecycle().addObserver(processLifecycleObserver);
         
    }
    
    @Override
    public void onAppForeground() {
        //App 回来啦(前台)
    }
    
    @Override
    public void onAppBackground() {
        //App 不见啦(后台)
    }
    
    @Override
    protected void onDestroy() {
 	
 	//不要忘记移除观察者,不然会重复回调接口
 	ProcessLifecycleOwner.get().getLifecycle().removeObserver(processLifecycleObserver);
   }

}

快去试试吧,只要在对应回调里边,写上你们自己项目的逻辑代码即可。




有更好办法的小伙伴欢迎留言,欢迎收藏 Felix的Android笔记

持续更新

猜你喜欢

转载自blog.csdn.net/qq_39457683/article/details/126892956