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
投稿

猜你喜欢

  • Flutter源码分析之自定义控件(RenderBox)指南

    2022-09-08 21:17:28
  • 为什么入门大数据选择Python而不是Java?

    2022-04-01 00:14:46
  • Java反射机制在Spring IOC中的应用详解

    2023-11-10 14:09:32
  • 零基础写Java知乎爬虫之获取知乎编辑推荐内容

    2023-11-29 04:33:39
  • C#执行外部命令的方法

    2022-12-21 18:03:32
  • 使用SpringMVC在redirect重定向的时候携带参数的问题

    2021-06-17 05:18:43
  • Admin - SpringBoot + Maven 多启动环境配置实例详解

    2022-03-08 09:48:16
  • 浅谈Mybatis传参类型如何确定

    2023-11-12 12:13:21
  • 基于WPF实现3D画廊动画效果的示例代码

    2022-02-06 08:02:22
  • SpringBoot集成Beetl后统一处理页面异常的方法

    2023-11-10 19:57:55
  • Android sdutio配置Zxing进行扫码功能的实现方法

    2023-12-12 15:40:13
  • Android 模拟新闻APP显示界面滑动优化实例代码

    2023-06-07 14:11:02
  • Java的静态类型检查示例代码详解

    2023-08-09 10:42:13
  • 使用PageHelper插件实现Service层分页

    2023-03-06 00:40:39
  • Android API开发之SMS短信服务处理和获取联系人的方法

    2021-10-23 03:22:15
  • c#接口使用示例分享

    2022-02-22 17:38:46
  • 浅谈byte和长度为8的boolean数组互相转换

    2023-11-07 00:34:37
  • Spring占位符Placeholder的实现原理解析

    2023-03-14 18:14:00
  • Android webview与js交换JSON对象数据示例

    2022-10-19 18:36:18
  • C#中out参数、ref参数与值参数的用法及区别

    2022-10-16 17:15:39
  • asp之家 软件编程 m.aspxhome.com