我想检查,我的程序是否在后台!我的prgram有一个包(我的所有类都在一个包中)。我搜索了一下,最后我找到了这种方式。我写这段代码,但当我的程序在后台时,我的代码没有运行。为什么呢?
public class BackgroundCheck extends AsyncTask<Context,Void,Boolean>{
@Override
protected Boolean doInBackground(Context... arg0) {
// TODO Auto-generated method stub
Context context=arg0[0];
return isAppInBackground(context);
}
private boolean isAppInBackground(Context context){
ActivityManager activityManager=(ActivityManager)context.getSystemService(context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcess=activityManager.getRunningAppProcesses();
if (appProcess==null)
return false;
final String packageName=context.getPackageName();
Log.e("packageName", packageName);
//Toast.makeText(context, "packageName="+packageName,Toast.LENGTH_LONG).show();
for(RunningAppProcessInfo processInfo:appProcess){
if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_BACKGROUND)&&( processInfo.processName.equals(packageName))){
Log.e("process", "in background");
Toast.makeText(context, "process in background", Toast.LENGTH_LONG).show();
Log.e("packagenmae", processInfo.processName);
return true;
}
}
return false;
}
}
我在这个类中添加了这个代码但是当我的程序在后台运行时,否则运行!总是我的程序在前台!什么是问题?
if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_BACKGROUND)&&( processInfo.processName.equals(packageName))){
Log.e("process", "in background");
Toast.makeText(context, "process in background", Toast.LENGTH_LONG).show();
Log.e("packagenmae", processInfo.processName);
return true;
}
else if((processInfo.importance==RunningAppProcessInfo.IMPORTANCE_FORGROUND)&&( processInfo.processName.equals(packageName))){
Log.e("process","in forground");
return true;
}
我可以使用另一种在api 7+中运行的方式吗?那样应该可靠...... 谢谢你的建议
答案 0 :(得分:0)
一次只能运行一个活动。当其他活动变为活动状态时,所有其他活动都将被暂停。
如果您希望代码在后台可靠运行,则需要使用服务。
答案 1 :(得分:0)