“活动内存堆栈管理”
大风起兮云飞扬,风萧萧兮易水寒,闲来无事斗地主,无聊至极!
最近工作刚完工,甚是有点风轻云淡之意,很是蛋疼,写写博客解闷。(未完晚上继续写)
继续:
包 com.xxoo.utils;
导入 android.app.Activity;
导入 android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
导入 android.os.Build;
import java.util.List;
import java.util.Stack;
/ **
*活动管理类,用于程序页面的销毁和应用退出
*由IMissYou于2016/4/1创建。
* /
public class AppManagerUtils {
// Activitystime
private static Stack <Activity> activityStack ;
//单例模式
private static AppManagerUtils instance ;
private AppManagerUtils(){
}
/ **
*单一实例
* /
public static AppManagerUtils getAppManager(){
if( instance == null){
instance = new AppManagerUtils();
}
返回实例 ;
}
/ **
*添加活动到堆栈
* /
public void addActivity(Activity activity){
if( activityStack == null){
activityStack = new Stack <Activity>();
}
activityStack .add(activity);
}
/ **
*获取当前活动(堆栈中最后一个压入的)
* /
public Activity currentActivity(){
Activity activity = activityStack .lastElement();
回报活动;
}
/ **
*结束当前Activity(堆栈中最后一个压入的)
* /
public void finishActivity(){
Activity activity = activityStack .lastElement();
finishActivity(活性);
}
/ **
*结束指定的Activity
* /
public void finishActivity(Activity activity){
if(activity!= null){
activityStack .remove(activity);
activity.finish();
activity = null ;
}
}
/ **
*结束指定类名的Activity
* /
public void finishActivity(Class <?> cls){
for(Activity activity: activityStack){
if(activity.getClass()。equals(cls)){
finishActivity(活性);
}
}
}
/ **
*结束指定类名的Activity
* /
public void finishNameActivity(String cls){
for(Activity activity: activityStack){
if(activity.getClass()。getName()。equals(cls)){
finishActivity(活性);
}
}
}
/ **
*获取指定类名的对象是否纯在
* @param cls
* @return
* /
public boolean getThisActivity(String cls){
for(Activity activity: activityStack){
if(activity.getClass()。getName()。 equals(cls)){
return true ;
}
}
返回假 ;
}
/ **
*清除指定类名外的所有对象
* @param cls
* /
public void finishClassActivity(String cls){
for(Activity activity: activityStack){
if(!activity.getClass()。getName()。 )){
finishActivity(活性);
}
}
}
/ **
*结束所有活动
* /
public void finishAllActivity(){
for( int i = 0 ; i < activityStack .size(); i ++){
if( null!= activityStack .get(i)){
activityStack .get我完成();
}
}
activityStack .clear();
}
/ **
*退出应用程序
* /
public void AppExit(Context context){
try {
finishAllActivity();
ActivityManager activityMgr =(ActivityManager)context.getSystemService(Context。ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
系统。退出(0);
android.os.Process。killProcess(android.os.Process。myPid());
} catch(Exception e){
LogUtils。e(“APP异常退出”);
}
最后 {
系统。退出(0);
android.os.Process。killProcess(android.os.Process。myPid());
}
}
/ **
*判断app是否后台前台运行
* @param context
* @return
* /
private boolean isAppIsInBackground(Context context){
boolean isInBackground = true ;
ActivityManager am =(ActivityManager)context.getSystemService(Context。ACTIVITY_SERVICE);
如果(Build.VERSION。SDK_INT > Build.VERSION_CODES。KITKAT_WATCH){
列表<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
对于(ActivityManager.RunningAppProcessInfo processInfo:runningProcesses){
如果(processInfo。重要 == ActivityManager.RunningAppProcessInfo。 IMPORTANCE_FOREGROUND){
为(字符串activeProcess:processInfo pkgList){
如果(activeProcess.equals(context.getPackageName())){
isInBackground = false ;
}
}
}
}
} else {
list <ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0)。topActivity ;
if(componentInfo.getPackageName()。equals(context.getPackageName())){
isInBackground = false ;
}
}
return isInBackground;
}
}
也没什么特别之处,就是活动的对象和包类名清除无用的界面,就这么简单。
版权声明:本文为博主原创文章,未经博主允许不得转载。
转载请注明原文地址: https://www.6miu.com/read-55854.html