问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android怎样判断应用程序退到后台

发布网友 发布时间:2022-05-06 19:02

我来回答

1个回答

热心网友 时间:2023-09-11 16:06

我们知道,当我们按返回或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; }}

文/tigergang(简书作者)
原文链接:http://www.jianshu.com/p/6abb22937e6f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 appium中background app关键字怎么用 安卓 怎么把system/app_back 下的东西映射到data/app下 如何实现连续按两次Back键退出App 国家提倡美丽乡村旅游发展,美丽乡村规划设计中主要包括哪些内容? ychma是什么牌子山地车自行车? 自行车国产杂牌山地车都有哪些 便宜且耐用就行不要求跑的很快 谢谢 跑狼山地车是杂牌子吗 买了一辆山地车。上面字母DKALN是杂牌子的么?貌似被骗了。,。 杂牌子的山地自行车能买吗? 预算五百块钱,想买辆山地自行车,上下班骑一共不到五公里,名牌肯定买不起了,其他杂牌有合适的吗? 杂牌山地车好骑吗 英骑山地车是杂牌吗 买了一辆山地车。上面字母DKALN是杂牌子的么?貌似被骗了。,。DKALN什么 千里达的自行车怎么样?千里达是不是杂牌的? 几百块钱的杂牌山地车 同样是27速的 跟美利达27速的那个快一些。 买杂牌山地自行车,需要注意哪些? 自行车国产杂牌山地车都有哪些? 杂牌自行车跟品牌的区别 杂牌山地车和名牌山地车 区别? 我的被限制无法解封怎麼办? ANDROID开发,让手机的系统返回键与APP的后退键做成一样的功能,假设APP界面访问顺序是A-B-C-B-C-B-C, ios 返回上个app 会触发什么事件 appbackup是什么意思? 关于android应用activity生命周期中,按下home键和按下back键的问题 back+up+app+data,wi-fipasswords,and+other+settings+to+google+servers是什么意思 求iu李知恩《我的大叔》的壁纸 哪里有李智恩iu的完全未压缩的电脑壁纸&#128536;&#128536;&#128536; 分辨率越高越好 想要几张iu李知恩《我的大叔》的壁纸 请问有李智恩的图片吗谢谢了 我有房子出租怎么登陆 宸是什么意思名字大全 我要出租房屋,网上如何登录 我想把自己的房子出租,有人告诉我,能把房子挂在网上,请问怎么挂呢? 怎么登,我想出租的房子 我明明实名了为什么游戏还是受限制 我想在58同城把自己家的房子注册一下租出去怎么注册呢、 我想出租房子,登什么网站? 我要出租房屋怎么操作 我想把房子挂到网上出租,怎么样把租房信息挂上网? 我想出租房子在网上怎么发