欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-28 23:49:40
前言 这周接到一个需求,需要在应用从后台切换到前台时,展示我们的广告。展示页面其实可以复用以前的开屏广告页,唯一的问题就是如何监听应用从后台切到了前台。 正文 在众多...

前言

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

正文

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

//自定义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 监听应用前/后台切换实例代码

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

结尾

这个方案要求api大于等于14,因为registeractivitylifecyclecallbacks方法要求api在14以上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。