SanfenR的博客

ActivityManager判断app运行状态

摘要: 在后台与网络交互中,需要使用Service来和服务器保持连接,因此Service在被进程Kill掉后,主动开启Service是必要的,因此首先的检测Service是否已启动

检测Service是否已启动

1
2
3
4
5
6
7
8
9
10
11
public static boolean isServiceRunning(String serviceClassName){
final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
for (RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(serviceClassName)){
return true;
}
}
return false;
}

检测Activity是否已启动

1
2
<!-- 权限-->
<uses-permission android:name="android.permission.GET_TASKS"/>
1
2
3
4
5
6
7
8
9
10
11
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> list = am.getRunningTasks(100);
boolean isAppRunning = false;
String MY_PKG_NAME = "com.cyberblue.iitag";
for (RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(MY_PKG_NAME) || info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
isAppRunning = true;
Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
break;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private boolean isLauncherRunnig(Context context) {
boolean result = false ;
List<String> names = getAllTheLauncher();
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE) ;
List<ActivityManager.RunningAppProcessInfo> appList = mActivityManager.getRunningAppProcesses() ;
for (RunningAppProcessInfo running : appList) {
if (running.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
for (int i = 0; i < names.size(); i++) {
if (names.get(i).equals(running.processName)) {
result = true ;
break;
}
}
}
}
return result ;
}

判断App是否运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* 判断app是否正在运行
* @param ctx
* @param packageName
* @return
*/
public boolean appIsRunning(Context ctx,String packageName)
{
ActivityManager am = (ActivityManager) ctx.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();
if(runningAppProcesses!=null)
{
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
if(runningAppProcessInfo.processName.startsWith(packageName))
{
return true;
}
}
}
return false;
}
/**
* app 是否在后台运行
* @param ctx
* @param packageName
* @return
*/
public boolean appIsBackgroundRunning(Context ctx,String packageName)
{
ActivityManager am = (ActivityManager) ctx.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses();
if(runningAppProcesses!=null)
{
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
if(runningAppProcessInfo.processName.startsWith(packageName))
{
return runningAppProcessInfo.importance!=RunningAppProcessInfo.IMPORTANCE_FOREGROUND && runningAppProcessInfo.importance!=RunningAppProcessInfo.IMPORTANCE_VISIBLE; //排除无界面的app
}
}
}
return false;
}