永发信息网

如何判断Android app退后台,进前台

答案:2  悬赏:0  手机版
解决时间 2021-02-15 01:20
如何判断Android app退后台,进前台
最佳答案
当我们按返回或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 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; }}
全部回答
 public static boolean isapplicationbroughttobackground(final context context) {   activitymanager am = (activitymanager) context.getsystemservice(context.activity_service);   list tasks = am.getrunningtasks(1);   if (!tasks.isempty()) {    componentname topactivity = tasks.get(0).topactivity;    if (!topactivity.getpackagename().equals(context.getpackagename())) {     return true;    }   }   return false;  }上面这段代码是需要一个权限的: < uses-permission android:name=”android.permission.get_tasks” />
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
颍东区杨楼孜镇幼儿园地址在什么地方,想过去
龙海家园定向房怎么办理入住手续
“仁者见仁,智者见智”,是对客观真理的否定
金来不锈钢广告装饰地址在什么地方,想过去办
请问我的车载cd不吃碟怎么办
高三学生用什么词典(字典有什么区别?)好呢
精华乳和爽肤水那个先涂?图的时候时候是揉还
颍东区任万军幼儿园怎么去啊,我要去那办事
为什么雨天过铁路的时候,伞会带电?
请问数学: 小明收到一份水费账单,内容如下
阜阳市颍东区插花镇幼儿园地址在哪,我要去那
邯郸泛阳担保在哪里啊,我有事要去这个地方
请问哪有黑眉锦蛇蛇苗可引进?请问哪有食用蛇
我是爱新觉罗正黄旗后裔,现今到了我这辈,是
颍东区插花镇杨桥集幼儿园怎么去啊,我要去那
推荐资讯
长运集团(六石售票处)地址好找么,我有些事要
激光切割机距物件距离一般是多少
偶苑杂货铺怎么去啊,有知道地址的么
一款货车模拟游戏,先用货车去接货,然后送到目
金盟华盛节能环保生活用品小超市NO.0203这个
请问人在五行当中~~~是属什么
英雄联盟世界总决赛多长时间一次
江苏安居安防公司工资高不高?
消防员穿衣服最快的速度
量块的精度由高到低分别是
微笑宝贝专业儿童摄影(中山路中段)地址在哪,
带路由功能的猫设置完PPPoe,下面路由器还要不
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?