IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Android 监听应用前/后台切换

    shendao发表于 2017-06-01 16:04:25
    love 0

    前言

    这周接到一个需求,需要在应用从后台切换到前台时,展示我们的广告。展示页面其实可以复用以前的开屏广告页,唯一的问题就是如何监听应用从后台切到了前台。

    正文

    在众多方法中,我采用了以下这种方式。废话不多说,咱们直接看代码:

    //自定义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 监听应用前/后台切换
    Log输出.png

    以上就是我对这个问题的解决方案。

    结尾

    这个方案要求API大于等于14,因为registerActivityLifecycleCallbacks方法要求API在14以上。
    最后,如有错误,欢迎大家指正。



沪ICP备19023445号-2号
友情链接