Android一些特殊方法

1、判断一个程序是否显示在前端

/**
	 * 判断一个程序是否显示在前端
	 * 
	 * @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<RunningAppProcessInfo> 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;
	}

 

可以根据importance的不同来判断前台或后台

RunningAppProcessInfo 里面的常量IMOPORTANCE就是上面所说的前台后台,其实IMOPORTANCE是表示这个app进程的重要性,因为系统回收时候,会根据IMOPORTANCE来回收进程的。具体可以去看文档。。

public static final int IMPORTANCE_BACKGROUND = 400//后台

public 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(); 

 

2、用于判断当前是否处于锁屏状态

/**
	 * 用于判断当前是否处于锁屏状态
	 * 
	 * @param context
	 * @return
	 */
	public static boolean isApplicationLocked(Context context) {
		KeyguardManager keyguardManager = (KeyguardManager) context
				.getSystemService(KEYGUARD_SERVICE);
		boolean isLockedState = keyguardManager.inKeyguardRestrictedInputMode();// 用于判断当前是否处于锁屏状态。
		return isLockedState;
	}

 

3、Activity中finish() onDestroy() 和System.exit()的区别

Activity.finish()

Call this when your activity is done and should be closed. 

在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。

当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。

Activity.onDestory()

the system is temporarily destroying this instance of the activity to save space.

系统销毁了这个Activity的实例在内存中占据的空间。

在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

System.exit(0)

这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。

------------------------------------------

finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。

猜你喜欢

转载自zmx.iteye.com/blog/2214029