安卓应用进后台要释放资源、进前台执行一些逻辑(比如执行接口刷数据、打开手势密码、启动服务等等)。

要解决2个问题:

1、 如何判断应用当前是否在前台?

2、如何得到用户按Home键、再次打开应用的事件?

Android5.0之前可以用ActivityManager的getRunningTasks方法, 但5.0及后续版本该方法被注释为@Deprecated。 下面函数可以用来判断app是否在前台, 从Android5.0开始通过判断进程优先级得出是否在前台。PS:进程分为5大优先级:前台进程、可视进城、服务进程、后台进程、空进程等。

    /*** 判断程序是否在前台运行* @param context* @return true在前台,false在后台*/private boolean isAppForeground(Context context) {boolean isForground = false;ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {//前台程序if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {for (String pkgName : processInfo.pkgList) {if (pkgName.equals(context.getPackageName())) {isForground = true;}}}}} else {//@deprecated As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, 从Android5.0开始不能使用getRunningTask函数List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);ComponentName componentInfo = taskInfo.get(0).topActivity;if (componentInfo.getPackageName().equals(context.getPackageName())) {isForground = true;}}return isForground;}

应用退后台、进前台都是通过判断当前进程的Activity是否处于活跃状态。 可通过2个具体方法实现:

1、 自定义一个Activity/FragmentActivity的派生类,  项目中所有的Activity都继承于自定义类。 覆盖onStart、onStop方法, 并设置单例整型变量自增1或者自减1。 具体逻辑参考第2种方式。

2、 Android还支持在Application类中注册Activity的回调, 我们可以在Application类里实现对应的逻辑。 count为1时表示应用切换到前台, 为0时表示切换到后台。

配置AndroidManifest.xml:

<application
    android:name=".TheApplication"
    ...
     />
public class TheApplication extends Application {private int mCount;....@Overridepublic void onCreate() {super.onCreate();...mCount = 0;registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {mCount++;//如果mCount==1,说明是从后台到前台if (mCount == 1){//执行app跳转到前台的逻辑
                   ...}}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {mCount--;//如果mCount==0,说明是前台到后台if (mCount == 0){//执行应用切换到后台的逻辑}}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});}@Overridepublic void onTerminate() {super.onTerminate();}....
}

如何判断Android app退后台、进前台相关推荐

  1. iOS 检测app进入后台或前台

    ##1.检测app进入后台 // 在AppDelete实现该方法 - (void)applicationDidEnterBackground:(UIApplication *)application ...

  2. Android app添加后台拉起机制

    本demo源码下载地址 App拉起机制源码下载 简介: 做智能售卖设备需要app一直在前台显示,但是有时由于一些不当操作或者系统原因会使app退出,导致设备不能使用.这时就需要拉起机制了. 拉起机制目 ...

  3. [Android开发] 从后台恢复前台界面需要输入密码的demo|监听Home短按长按锁屏

    一.效果图 二.实现原理 通过接收系统广播来判断home按键,广播Application全局,在接收到广播的时候在BaseActivity的onStop里面打开输入密码的对话框,再次回到界面就已经是显 ...

  4. android app 的后台代码,包括后台的Android美食APP项目开源代码

    项目简介 小食光定位为一款集美食,社交,LBS服务于一体的美食推荐APP.为你发现周边美食的同时提供一个吃货分享的平台. APP截图 功能模块 美食推荐 :提供基础的美食信息查询: 商家推荐 : 基于 ...

  5. iOS如何检测app从后台调回前台

    当按Home键,将应用放在后台之后,然后再次调用回来的时候,回出发AppDelegate里面的一个方法,-(void)applicationWillEnterForeground. 当应用再次回到后台 ...

  6. android app锁定后台运行的方法

    想直接看图操作,可以android 下一个 小米穿戴 然后 我->开启后台运行权限 ->点击当前手机后面的 里面有 小米MIUI,华为EMUI,OPPO ColorOS ,Vivo Fun ...

  7. android app应用后台休眠,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...

    原标题:安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行 安卓手机锁屏后,很多程序就会自动关闭,实际上,这是安卓手机的一种保护机制.为了使系统能够流畅稳定的运行以及更加省电,它都会在手机 ...

  8. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)

    随着手机的普及,手机上安装的应用越来越多,手机厂商为了加长手机待机时间,对于APP都会进行强制关闭, 一般时间为3-10分钟,每个品牌的时间不一定. 这就导致很多APP会自动杀死.导致商家和骑手无法及 ...

  9. android 应用程序 判断 ,如何判断Android应用程序是否正在前台运行?

    慕的地6264312 或者,您可以检查ActivityManager哪些任务正在按getRunningTasks方法运行.然后,检查返回的任务列表中的第一个任务(前景中的任务)是否是您的任务.这是代码 ...

最新文章

  1. IOS开发UISearchBar失去第一响应者身份后,取消按钮不执行点击事件的问题
  2. 日期型转json格式(springboot)
  3. jquery模拟可输入的下拉框
  4. IE是怎么处理meta steam的编码的 那100+个xss
  5. oracle从删库到跑路,Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26
  6. 给self.navigationItem.rightBarButtonItem设置字体颜色
  7. Ubuntu下EEUPDATE工具的使用方法
  8. AD/Allegro:0603、0805、1206尺寸封装设计资料
  9. 微信的服务器数量限制,微信时刻视频最多可以发几个 发布数量限制多少
  10. 软件项目实施工作流程参考
  11. 移动平台端到端低成本解决方案
  12. 我真的很郁闷,应该振作起来的
  13. JAVA 中级 ARRAYLIST - ARRAYLIST上使用泛型
  14. uniapp 微信小程序开发 解决旧版本缓存
  15. 【camera】【摄像头模组】摄像头模组简单介绍
  16. ROS的 sudo rosdep init 的报错终极解决方案
  17. 2023最新完整版python安装教程
  18. 2020年2月中国编程语言排行榜
  19. bootstrap学习笔记一: bootstrap初认识,hello bootstrap(下)
  20. 使用IIS搭建本地Web服务器(手把手教程)

热门文章

  1. Oracle字段保留2两位小数点number类型
  2. 常见的USB接口种类以及区别
  3. JavaSE学习---I/O流学习分享
  4. 阿里云SDK和SpringBoot maven项目中jar包冲突的解决办法
  5. 在FL Studio中如何制作人声切片(Vocal Chops)
  6. 3D可视化信息管理平台让运维管理更高效率!
  7. 联盟优势电信服务器,中国电信积极推进OLA联盟行业技术标准制定 加速智能家居互联互通...
  8. skycc营销软件为我赚取的第一个30万
  9. 怎么实现抓取同行网站访客号码
  10. IPMP国际项目管理资质认证培训班