前言
这篇文章主要介绍使用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笔记
持续更新