package com.jacky.compatible.launcher.features.eliminateprocess; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import com.jacky.compatible.launcher.model.TaskInfo; import java.util.ArrayList; import java.util.List; /* * by:kangzizhaung */ public class TaskInfoProvider { private final PackageManager pmManager; private final ActivityManager aManager; public TaskInfoProvider(Context context) { pmManager = context.getPackageManager(); aManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); } // 遍历传入的列表,将所有应用的信息传入taskinfo中 public List<TaskInfo> GetAllTask(List<RunningAppProcessInfo> list) { List<TaskInfo> taskInfos = new ArrayList<>(); for (RunningAppProcessInfo appProcessInfo : list) { TaskInfo info = new TaskInfo(); int id = appProcessInfo.pid; info.setId(id); String packageName = appProcessInfo.processName; info.setPackageName(packageName); try { // ApplicationInfo是AndroidMainfest文件里面整个Application节点的封装װ ApplicationInfo applicationInfo = pmManager.getPackageInfo( packageName, 0).applicationInfo; Drawable icon = applicationInfo.loadIcon(pmManager); info.setIcon(icon); String name = applicationInfo.loadLabel(pmManager).toString(); info.setName(name); info.setIsSystemProcess(!IsSystemApp(applicationInfo)); android.os.Debug.MemoryInfo[] memoryInfo = aManager .getProcessMemoryInfo(new int[] { id }); int memory = memoryInfo[0].getTotalPrivateDirty(); info.setMemory(memory); taskInfos.add(info); info = null; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); info.setName(packageName); info.setIsSystemProcess(true); } } return taskInfos; } public Boolean IsSystemApp(ApplicationInfo info) { // 有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的, // 它就不是系统应用啦,这个就是判断这种情况的 if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { return true; } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { return true; } return false; } }