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输出:

Android 监听应用前/后台切换实例代码

来源:http://www.jianshu.com/p/45af2b52e946?utm_source=tuicool&utm_medium=referral

标签:android,监听,应用
0
投稿

猜你喜欢

  • C#实现学生成绩管理系统

    2021-06-05 22:51:31
  • JAVA中AES加密方法实例分析

    2023-12-18 13:09:40
  • C#调用和实现WebService,纯手工打造!

    2023-12-12 14:58:30
  • springboot中bean的加载顺序问题

    2022-01-04 19:55:57
  • Java验证时间格式是否正确方法类项目实战

    2021-05-30 02:15:15
  • 基于Java实现一个简单的单词本Android App的实践

    2023-04-17 21:27:39
  • 解决RedisTemplate存储至缓存数据出现乱码的情况

    2023-04-20 15:30:58
  • 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
  • 关于自定义过滤器获取不到session问题

    2022-05-16 11:30:21
  • C# TabControl控件中TabPage选项卡切换时的触发事件问题

    2022-10-30 08:11:13
  • 新手学习微服务SpringCloud项目架构搭建方法

    2022-01-29 04:00:17
  • Java 深拷贝与浅拷贝的分析

    2023-07-30 14:13:13
  • elasticsearch集群cluster示例详解

    2023-12-11 16:49:27
  • 详解如何让Spring MVC显示自定义的404 Not Found页面

    2023-12-12 15:48:47
  • Java map为什么不能遍历的同时进行增删操作

    2023-12-21 17:28:29
  • SpringBoot登录拦截配置详解(实测可用)

    2023-04-22 20:52:21
  • Monaco Editor实现sql和java代码提示实现示例

    2023-01-31 16:59:48
  • SpringCloud服务实现同时使用eureka和nacos方法

    2022-01-14 13:58:57
  • asp之家 软件编程 m.aspxhome.com