Android 监听应用前/后台切换实例代码
作者:实例波 时间:2021-06-05 05:25:22
前言
这周接到一个需求,需要在应用从后台切换到前台时,展示我们的广告。展示页面其实可以复用以前的开屏广告页,唯一的问题就是如何监听应用从后台切到了前台。
正文
在众多方法中,我采用了以下这种方式。废话不多说,咱们直接看代码:
//自定义Application类
public class MyApplication extends Application
在清单文件中声明
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
在MyApplication里重写onTrimMemory方法:
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
if (level == TRIM_MEMORY_UI_HIDDEN) {
isBackGround = true;
Log.i("bo", "APP遁入后台");
}
}
onTrimMemory方法为开发者提供了一个合适的时机,用来释放掉一些不用的资源,从而让我们的应用在后台存活更长时间。其中level参数就代表我们的应用当前在内存中的状态,TRIM_MEMORY_UI_HIDDEN代表应用从前台切到了后台。这个时候我们便可以标记应用切换到了后台。
接下来需要监听应用在什么时候回到了前台:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
if (isBackGround) {
isBackGround = false;
Log.i("bo", "APP回到了前台");
}
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
我们使用registerActivityLifecycleCallbacks来监听所有Activity的生命周期回调,并在onActivityResumed方法中进行判断:调用了Activity的onResume方法,并且已经标记为后台状态,那么就可以判断APP回到了前台。
以下是log输出:
来源:http://www.jianshu.com/p/45af2b52e946?utm_source=tuicool&utm_medium=referral
标签:android,监听,应用
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C#实现学生成绩管理系统
2021-06-05 22:51:31
![](https://img.aspxhome.com/file/2023/4/98224_0s.jpg)
JAVA中AES加密方法实例分析
2023-12-18 13:09:40
C#调用和实现WebService,纯手工打造!
2023-12-12 14:58:30
springboot中bean的加载顺序问题
2022-01-04 19:55:57
![](https://img.aspxhome.com/file/2023/0/62510_0s.png)
Java验证时间格式是否正确方法类项目实战
2021-05-30 02:15:15
![](https://img.aspxhome.com/file/2023/8/86778_0s.jpg)
基于Java实现一个简单的单词本Android App的实践
2023-04-17 21:27:39
![](https://img.aspxhome.com/file/2023/1/79851_0s.png)
解决RedisTemplate存储至缓存数据出现乱码的情况
2023-04-20 15:30:58
![](https://img.aspxhome.com/file/2023/8/92718_0s.jpg)
C#的泛型方法解析
2022-10-17 10:20:54
详解spring mvc中url-pattern的写法
2023-11-11 07:30:58
C#实现将DataTable内容输出到Excel表格的方法
2023-05-01 15:20:38
![](https://img.aspxhome.com/file/2023/4/68084_0s.png)
关于自定义过滤器获取不到session问题
2022-05-16 11:30:21
![](https://img.aspxhome.com/file/2023/2/113182_0s.jpg)
C# TabControl控件中TabPage选项卡切换时的触发事件问题
2022-10-30 08:11:13
![](https://img.aspxhome.com/file/2023/9/85739_0s.png)
新手学习微服务SpringCloud项目架构搭建方法
2022-01-29 04:00:17
Java 深拷贝与浅拷贝的分析
2023-07-30 14:13:13
elasticsearch集群cluster示例详解
2023-12-11 16:49:27
![](https://img.aspxhome.com/file/2023/3/67003_0s.png)
详解如何让Spring MVC显示自定义的404 Not Found页面
2023-12-12 15:48:47
![](https://img.aspxhome.com/file/2023/1/72571_0s.jpg)
Java map为什么不能遍历的同时进行增删操作
2023-12-21 17:28:29
![](https://img.aspxhome.com/file/2023/4/105944_0s.png)
SpringBoot登录拦截配置详解(实测可用)
2023-04-22 20:52:21
![](https://img.aspxhome.com/file/2023/5/106135_0s.png)
Monaco Editor实现sql和java代码提示实现示例
2023-01-31 16:59:48
SpringCloud服务实现同时使用eureka和nacos方法
2022-01-14 13:58:57
![](https://img.aspxhome.com/file/2023/6/70346_0s.png)