Android判断应用是否在前台或后台

Android判断应用是否在前台或后台

判断是否前台是否前端显示:

/**
* 判断一个程序是否显示在前端,根据测试此方法执行效率在11毫秒,无需担心此方法的执行效率
*
* @param packageName程序包名
* @param context上下文环境
* @return true--->在前端,false--->不在前端
*/

public  static  boolean isApplicationShowing ( String packageName,
Context context )  {
boolean result  =  false ;
ActivityManager am  =  (ActivityManager ) context
. getSystemService ( Context. ACTIVITY_SERVICE ) ;
List &lt ;RunningAppProcessInfo &gt ; appProcesses  = am. getRunningAppProcesses ( ) ;
if  (appProcesses  !=  null )  {
for  (RunningAppProcessInfo runningAppProcessInfo  : appProcesses )  {
if  (runningAppProcessInfo. processName. equals (packageName ) )  {
int status  = runningAppProcessInfo. importance ;
if  (status  == RunningAppProcessInfo. IMPORTANCE_VISIBLE
|| status  == RunningAppProcessInfo. IMPORTANCE_FOREGROUND )  {
result  =  true ;
}
}
}
}
return result ;
}

***********************************************************************************

小结:
根据IMOPORTANCE来回收进程的。具体可以去看文档。。

public static final int IMPORTANCE_BACKGROUND = 400//后台

public

可以根据importance的不同来判断前台或后台
RunningAppProcessInfo 里面的常量IMOPORTANCE就是上面所说的前台后台,其实IMOPORTANCE是表示这个app进程的重要性,因为系统回收时候,会 static final int IMPORTANCE_EMPTY = 500//空进程
public static final int IMPORTANCE_FOREGROUND = 100//在屏幕最前端、可获取到焦点 可理解为Activity生命周期的OnResume();
public static final int IMPORTANCE_SERVICE = 300//在服务中
public static final int IMPORTANCE_VISIBLE = 200//在屏幕前端、获取不到焦点可理解为Activity生命周期的OnStart();
判断应用是否在后台:
private  boolean isBackgroundRunning ( )  {
String processName  =  "match.android.activity" ;

ActivityManager activityManager  =  (ActivityManager ) getSystemService (ACTIVITY_SERVICE ) ;
KeyguardManager keyguardManager  =  (KeyguardManager ) getSystemService (KEYGUARD_SERVICE ) ;

if  (activityManager  ==  null )  return  false ;
// get running application processes
List processList  = activityManager. getRunningAppProcesses ( ) ;
for  (ActivityManager. RunningAppProcessInfo process  : processList )  {
if  (process. processName. startsWith (processName ) )  {
boolean isBackground  = process. importance  != IMPORTANCE_FOREGROUND  &amp ;&amp ; process. importance  != IMPORTANCE_VISIBLE ;
boolean isLockedState  = keyguardManager. inKeyguardRestrictedInputMode ( ) ;
if  (isBackground  || isLockedState )  return  true ;
else  return  false ;
}
}
return  false ;
}
转自karant

你可能感兴趣的:(Android判断应用是否在前台或后台)