这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本篇文章主要介绍了 Android 监听应用前 / 后台切换实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前言
这周接到一个需求,需要在应用从后台切换到前台时,展示我们的广告。展示页面其实可以复用以前的开屏广告页,唯一的问题就是如何监听应用从后台切到了前台。
正文
在众多方法中,我采用了以下这种方式。废话不多说,咱们直接看代码:
- //自定义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 输出:
以上就是我对这个问题的解决方案。
结尾
这个方案要求 API 大于等于 14,因为 registerActivityLifecycleCallbacks 方法要求 API 在 14 以上。
来源: http://www.phperz.com/article/17/0826/337570.html