Android应用程序转到后台并回到前台判断方法

我们知道,当我们按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起。这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用。当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程。

那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了?

看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台

事实上,Android在SDK 14的时候提供了一个Callback。ActivityLifecycleCallbacks,你可以通过这个Callback拿到App所有Activity的生命周期回调。

public class Application extends android.app.Application {
   private int activityCount;//activity的count数
   private boolean isForeground;//是否在前台
  @Override  public void onCreate() {
   super.onCreate();
 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
    @Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
      }
     @Override      public void onActivityStarted(Activity activity) {
       activityCount++;
}      @Override
                  public void onActivityResumed(Activity activity) {
     } @Override
                   public void onActivityPaused(Activity activity) {
     }   @Override
                   public void onActivityStopped(Activity activity) {
      activityCount--;        if(0==activityCount){
         isForeground=false;        }
      }  @Override
                  public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
     }     @Override
                   public void onActivityDestroyed(Activity activity) {
      }    });  }  }

这个Callback写在Application里的,你可以在Application初始化的时候来注册。

通过这些回调我们可以将这个计数放在onStart()和onStop()中去。activityCount==1,那么就是前台,activityCount==0,那就是后台。这样判断很很简单了吧。

public abstract class BaseClass extends AppCompatActivity {
判断当前的应用程序是不是在运行
//需要申请GETTask权限
 private boolean isApplicationBroughtToBackground() {
    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);    List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
   if (!tasks.isEmpty()) {      ComponentName topActivity = tasks.get(0).topActivity;
      if (!topActivity.getPackageName().equals(getPackageName())) {
      return true;      }    }    return false;  }
  public boolean wasBackground= false;  //声明一个布尔变量,记录当前的活动背景
  @Override  public void onPause(){
    super.onPause();
    if(isApplicationBroughtToBackground())
     wasBackground= true;  }
public void onResume(){
   super.onResume();
 if(wasBackground){//
         Log.e("aa","从后台回到前台");    }    wasBackground= false;  }}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android判断当前应用程序处于前台还是后台的两种方法

    1.通过RunningTaskInfo类判断(需要额外权限): 复制代码 代码如下: /**     *判断当前应用程序处于前台还是后台     */    public static boolean isApplicationBroughtToBackground(final Context context) {        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SER

  • Android编程判断当前指定App是否在前台的方法

    本文实例讲述了Android编程判断当前指定App是否在前台的方法.分享给大家供大家参考,具体如下: //在进程中去寻找当前APP的信息,判断是否在前台运行 private boolean isAppOnForeground() { ActivityManager activityManager =(ActivityManager) getApplicationContext().getSystemService( Context.ACTIVITY_SERVICE); String packag

  • Android判断App前台运行还是后台运行(运行状态)

    本文通过图文并茂的方式给大家介绍android判断app状态的相关内容,具体详情如下所示: 要了解这块,首先需要明白一些概念,app,process,task 1.process就是进程,是linux的概念. 2.一般一个app拥有一个uid,运行在一个进程里,如果app中给service等定义不同的uid,那Service就运行在另外一个进程里,也就是说uid就相当于进程的id一样,一个uid就代表一个进程:也可以几个app定义一个uid,那他们就运行在一个进程里了. 3.task是andro

  • Android 判断程序在前台运行还是后台运行

    就简单的一个方法,就不用写什么步骤了: public static boolean Frontdesk(Context context) { ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManage

  • Android判断当前App是在前台还是在后台

    本文实例为大家分享了Android判断当前App状态的具体实现代码,供大家参考,具体内容如下 第一种: /** *判断当前应用程序处于前台还是后台 * * @param context * @return */ public static boolean isApplicationBroughtToBackground(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(

  • 判断Android程序是否在前台运行的两种方法

    @Override protected void onStop() { if (!isAppOnForeground()) { Debug.i("dwy", "enter background"); mIsBackground = true; } else { Debug.i("dwy", "foreground"); mIsBackground = false; } Judge is App in background wh

  • Android应用程序转到后台并回到前台判断方法

    我们知道,当我们按返回或Home键退出应用程序的界面时,应用程序会在后台被挂起.这么设计的好处是,由于应用被系统缓存在内存中,那么在用户打开启动应用时就可以通过调用缓存,快速启动应用.当然,由于当今内存和处理器能力的限制,系统会自动关闭一些进程. 那么我如何判断这个应用程序在前台还是后台,应用从后台回到前台了? 看到一般都是runningProcess或者runningTasks来判断应用在前台还是后台 事实上,Android在SDK 14的时候提供了一个Callback.ActivityLif

  • android ndk程序获取外置SD沙盒目录的方法讲解

    android的App只能访问外置SD指定的目录,一般是: $外置SD目录 + "/Android/data/" + $apk包名 1 获取外置SD目录的方法: 调用getenv(const char *name)方法,通过环境变量"SECONDARY_STORAGE"得到,若没有这个变量,则通过"EXTERNAL_STORAGE"得到. 如果上面方法还不行,枚举/mnt目录下的所有目录. 2 获取apk包名的方法: pid_t getpid()

  • Android App应用退到后台显示通知的实现方法

    目录 需求背景 崩溃信息 总结 需求背景 刚开始接到这个需求时,第一时间想到的是做成跟银行类app一样用户退到主页之后,需要在通知栏显示“XXX在后台运行”,并且该通知不能被清除,只有用户重新进入app再消失.然后就想到了一个方案前台服务(foregroundService) 来实现,于是撸起袖子就是干. 1.创建一个ForegroundService继承Service 2.重写onCreate等一系列方法 3.创建通知,根据不同版本来开启服务 根据不同版本开启服务 4.监听Applicatio

  • Android应用程序保持后台唤醒(使用WakeLock实现)

    在使用一些产品列如微信.QQ之类的,如果有新消息来时,手机屏幕即使在锁屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了.但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态.针对前面的例子,收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机

  • Android 应用程序的启动流程示例详解

    目录 应用进程的启动流程 1.ActivityStackSupervisor.startSpecificActivity 2.ATMS.startProcessAsync 3.LocalService.startProcess 4.startProcessLocked函数 5.ProcessList.startProcessLocked 6.ProcessList.startProcessLocked重载 7.ProcessList.startProcess 8.ZygoteState.star

  • Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)

    本文实例讲述了Android开发之在程序中时时获取logcat日志信息的方法.分享给大家供大家参考,具体如下: 今天分享一个在软件开发中很实用的例子,也是这几天在通宵加班中我使用的一个小例子, 在程序中监听Log信息. 为什么说它实用?原因是Android的开发厂商各种修改之后手机和手机之间以后存在很多差异.比如说魅族M9手机 开发中如果项目中涉及到访问手机系统的地方,例如访问系统短信库,M9手机它会提示一个dialog框 让用户自己去选择 访问还是不访问.这样就给开发适配带来了巨大的麻烦.本来

  • Android应用程序窗口(Activity)窗口对象(Window)创建指南

    在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口.由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的.在本文中,我们就将详细分析Android应用程序窗口对象的创建过程. 从前面Android应用程序窗口(Activity)实现框架简要介绍和学习计划一文可以知道,在PH

  • Android中使用Service实现后台发送邮件功能实例

    本文实例讲述了Android中使用Service实现后台发送邮件功能.分享给大家供大家参考,具体如下: 程序如下: import android.app.Activity; import android.content.Intent; import android.content.res.Resources.NotFoundException; import android.os.Bundle; import android.widget.TextView; public class A05Ac

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

    前言 这周接到一个需求,需要在应用从后台切换到前台时,展示我们的广告.展示页面其实可以复用以前的开屏广告页,唯一的问题就是如何监听应用从后台切到了前台. 正文 在众多方法中,我采用了以下这种方式.废话不多说,咱们直接看代码: //自定义Application类 public class MyApplication extends Application 在清单文件中声明 <application android:name=".MyApplication" android:allo

  • Android应用程序模型之应用程序,任务,进程,线程分析

    本文讲述了Android应用程序模型之应用程序,任务,进程,线程.分享给大家供大家参考,具体如下: 大多数操作系统,在应用程序所寄存的可执行程序映像(如Windows系统里的.exe).它所运行的进程以及和用户交互的图标和应用之间有一种严格的1对1关系.在Android系统里,这些关联要松散得多.并且重要的是要理解各种概念怎么样组成整体. 由于Android应用固有的灵活性,当实现这些不同方面的时候有一些基本术语需要加以理解: ① 一个Android包 (.apk)文件,其中包含一个应用程序的代

随机推荐