如何判断Android app退后台、进前台
来源:互联网 发布:ios手机虚拟定位软件 编辑:程序博客网 时间:2024/04/27 17:54
安卓应用进后台要释放资源、进前台执行一些逻辑(比如执行接口刷数据、打开手势密码、启动服务等等)。
要解决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; .... @Override public void onCreate() { super.onCreate(); ... mCount = 0; registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { mCount++; //如果mCount==1,说明是从后台到前台 if (mCount == 1){ //执行app跳转到前台的逻辑
... } } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { mCount--; //如果mCount==0,说明是前台到后台 if (mCount == 0){ //执行应用切换到后台的逻辑 } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }); } @Override public void onTerminate() { super.onTerminate(); } ....}
1 0
- 如何判断Android app退后台、进前台
- 判断Android app退后台、进前台
- android 如何判断app 运行在后台
- Android如何实现对APP是否处于前台的判断?
- Android中如何判断app是否在前台
- Android中如何判断本app是否在前台运行
- android app前后台判断
- 如何判断app在前台还是后台
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断App是否在前台运行
- Android判断APP是否在前台运行
- Android 判断app是否运行在后台
- Android 判断app是否在前台运行
- PHP递归读取一个路径下的目录及文件
- 一天一个设计模式---迭代器模式
- 常用meta整理
- 【PHP】验证码实现
- 怎样写出更快的C程序
- 如何判断Android app退后台、进前台
- Processing-Minim翻译----------Class Minim
- 161122
- Course Schedule
- ios支付宝客户端集成流程
- 彩笔笔记2016/11/22——rpm与yum安装程序
- 用main函数的参数实现简易计算器
- 函数实现键盘输入整型数,将其转换成字符串输出。123456789 "123456789"
- 为子shell设置变量值的两种方法