Android5.0之後使用
ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//獲取進程的集合
runningAppProcesses= activityManager.getRunningAppProcesses();
size = runningAppProcesses.size();
這種方法獲取進程數,已經不可能了android開發越來越艱難,前天寫進程管理的代碼。在這裏加以總結
1.若用戶未開啓權限,需要先開啓權限:
protected void oncreat(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (!hasPermission()) {
startActivityForResult(
new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),
MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS) {
if (!hasPermission()) {
##若用戶未開啓權限,則引導用戶開啓“Apps with usage access”權限
startActivityForResult(
new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),
MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
}
}
}
##//檢測用戶是否對本app開啓了“Apps with usage access”權限
private boolean hasPermission() {
AppOpsManager appOps = (AppOpsManager)
getSystemService(Context.APP_OPS_SERVICE);
int mode = 0;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
android.os.Process.myUid(), getPackageName());
}
return mode == AppOpsManager.MODE_ALLOWED;
}
2.提供的方法的集合
public static int size;
/**
* 獲取進程數的方法
* @param context
* @return
*/
public static int getProcessCount(Context context){
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
size = getTopApp(context);
}else {
ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//獲取進程的集合
runningAppProcesses= activityManager.getRunningAppProcesses();
size = runningAppProcesses.size();
}
return size;
}
/**
* 6.0獲取進程數
* @param context
* @return
*/
private static int getTopApp(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
if (m != null) {
long now = System.currentTimeMillis();
//獲取60秒之內的應用數據
List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);
Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());
String topActivity = "";
//取得最近運行的一個app,即當前運行的app
if ((stats != null) && (!stats.isEmpty())) {
int j = 0;
for (int i = 0; i < stats.size(); i++) {
if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {
j = i;
}
topActivity = stats.get(j).getPackageName();
Log.i(TAG, "top running app is : "+topActivity);
}
}
return stats.size();
}
}
return 0;
}
/**
*獲取棧頂的包名
*/
public static String getTopActivityApp(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
if (m != null) {
long now = System.currentTimeMillis();
//獲取60秒之內的應用數據
List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);
Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());
String topActivity = "";
//取得最近運行的一個app,即當前運行的app
if ((stats != null) && (!stats.isEmpty())) {
int j = 0;
for (int i = 0; i < stats.size(); i++) {
if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {
j = i;
}
}
topActivity = stats.get(j).getPackageName();
return topActivity;
}
Log.i(TAG, "top running app is : "+topActivity);
}
}
return null;
}
/**
* 獲取可用內存的數據大小 ,單位爲byte
* @param context
* @return
*/
public static long getAvailSpace(Context context){
//獲取activityManager
ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//構建可用內存對象
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
long availMem = memoryInfo.availMem;
return availMem;
}
public static long getTotalSpace(Context context){
//獲取activityManager
ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
//構建可用內存對象
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
return memoryInfo.totalMem;
}
/**
* 獲取全部的內存空間
* @return
*/
public static long getTotalSpace(){
FileReader fileReader=null;
BufferedReader bufferedReader=null;
try {
fileReader=new FileReader("proc/meminfo");
bufferedReader=new BufferedReader(fileReader);
String lineOne = bufferedReader.readLine();
char[] chars = lineOne.toCharArray();
StringBuffer stringBuffer = new StringBuffer();
for (char aChar : chars) {
if (aChar>='0'&&aChar<='9'){
stringBuffer.append(aChar);
}
}
return Long.parseLong(stringBuffer.toString())*1024;
} catch (Exception e) {
e.printStackTrace();
}finally {
if (fileReader!=null&&bufferedReader!=null){
try {
bufferedReader.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return 0;
}
/**
* 獲取進程的信息
* @param context
* @return
*/
public static List<ProcessInfoBean> getProcessInfo(Context context){
ArrayList<ProcessInfoBean> processInfoList = new ArrayList<>();
ActivityManager systemService = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = systemService.getRunningAppProcesses();
PackageManager PM = context.getPackageManager();
for (ActivityManager.RunningAppProcessInfo runningAppProcess : runningAppProcesses) {
ProcessInfoBean processInfo=new ProcessInfoBean();
processInfo.packageName= runningAppProcess.processName;
//獲取系統佔用的內存大小
int pid = runningAppProcess.pid;
Debug.MemoryInfo[] processMemoryInfo = systemService.getProcessMemoryInfo(new int[]{pid});
//獲取已使用的大小:
processInfo.memeSize= processMemoryInfo[0].getTotalPrivateDirty()*1024;
//獲取應用的名稱
try {
ApplicationInfo applicationInfo = PM.getApplicationInfo(processInfo.getPackageName(), 0);
processInfo.name= applicationInfo.loadLabel(PM).toString();
processInfo.icon= applicationInfo.loadIcon(PM);
if ((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
processInfo.isSystem=true;
}else {
processInfo.isSystem=false;
}
} catch (PackageManager.NameNotFoundException e) {
processInfo.name=processInfo.packageName;
processInfo.icon=context.getResources().getDrawable(R.mipmap.ic_launcher);
processInfo.isSystem=true;
e.printStackTrace();
}
processInfoList.add(processInfo);
}
return processInfoList;
}
/**
* 6.0版本獲取相應的進程信息
* @param context
* @return
*/
public static List<ProcessInfoBean> getProcess6Info(Context context){
ArrayList<ProcessInfoBean> processInfoList = new ArrayList<>();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
if (m != null) {
long now = System.currentTimeMillis();
//獲取60秒之內的應用數據
List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);
ActivityManager systemService = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());
//取得最近運行的一個app,即當前運行的app
if ((stats != null) && (!stats.isEmpty())) {
for (int i = 0; i < stats.size(); i++) {
/* if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {
j = i;
}*/
int i1 = stats.get(i).describeContents();
String processName = stats.get(i).getPackageName();
Log.i(TAG, "top running app is : " + processName);
PackageManager PM = context.getPackageManager();
ProcessInfoBean processInfo=new ProcessInfoBean();
int uidForName = Process.getUidForName(processName);
/***
* 此方法未能成功獲取進程的內存信息
*/
Debug.MemoryInfo[] processMemoryInfo = systemService.getProcessMemoryInfo(new int[]{uidForName});
//獲取已使用的大小:
processInfo.memeSize= processMemoryInfo[0].getTotalPrivateDirty()*1024;
processInfo.packageName= processName;
processInfo.appPid=uidForName;
//獲取應用的名稱
try {
ApplicationInfo applicationInfo = PM.getApplicationInfo(processInfo.getPackageName(), 0);
processInfo.name= applicationInfo.loadLabel(PM).toString();
processInfo.icon= applicationInfo.loadIcon(PM);
if ((applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)==ApplicationInfo.FLAG_SYSTEM){
processInfo.isSystem=true;
}else {
processInfo.isSystem=false;
}
} catch (PackageManager.NameNotFoundException e) {
processInfo.name=processInfo.packageName;
processInfo.icon=context.getResources().getDrawable(R.mipmap.ic_launcher);
processInfo.isSystem=true;
e.printStackTrace();
}
processInfoList.add(processInfo);
}
}
}
}
return processInfoList;
}