Android編程實(shí)現(xiàn)任務(wù)管理器的方法
本文實(shí)例講述了Android編程實(shí)現(xiàn)任務(wù)管理器的方法。分享給大家供大家參考,具體如下:
任務(wù)管理器可以實(shí)現(xiàn)的功能有:
1.查看當(dāng)前系統(tǒng)下運(yùn)行的所有的進(jìn)程
2.可以查看每個(gè)進(jìn)程的進(jìn)程號(hào)、版本號(hào)以及內(nèi)存占用情況
3.殺死進(jìn)程(可以殺死全部進(jìn)程或者殺死指定的進(jìn)程)
4.查看系統(tǒng)剩余內(nèi)存
效果圖:

殺死全部進(jìn)程

實(shí)現(xiàn)思路:
ActivityManager類可以獲取到當(dāng)前系統(tǒng)的所有進(jìn)程,以及每個(gè)進(jìn)程的信息,也可以殺死某個(gè)進(jìn)程,
ActivityManager.getRunningAppProcesses(); 獲取系統(tǒng)的所有進(jìn)程
ActivityManager.getProcessMemoryInfo(pids); 根據(jù)進(jìn)程號(hào)獲取每個(gè)進(jìn)程的內(nèi)存占用情況
ActivityManager.restartPackage(processName) ; 根據(jù)進(jìn)程的包名殺死某個(gè)進(jìn)程
PackageManager可以根據(jù)包名獲取程序的圖標(biāo)、版本號(hào)、名字、權(quán)限、簽名
核心代碼:
/*
* 獲取所有進(jìn)程及用戶 的進(jìn)程
*/
protected void initData() {
runningAppProcessInfos =ActivityManager.getRunningAppProcesses(); //獲取所有的進(jìn)程
userRunningAppProcessInfos = new ArrayList<ActivityManager.RunningAppProcessInfo>();//獲取用戶的進(jìn)程
for(int i = 0; i< runningAppProcessInfos.size();i++){
if("system".equals(runningAppProcessInfos.get(i).processName)
||"android.process.media".equals(runningAppProcessInfos.get(i).processName)
||"android.process.acore".equals(runningAppProcessInfos.get(i).processName)
){
continue;
}
userRunningAppProcessInfos.add(runningAppProcessInfos.get(i));
}
}
注:殺死全部進(jìn)程實(shí)際上殺死的是用戶的所有進(jìn)程,系統(tǒng)進(jìn)程是無(wú)法殺死的,所以這里要獲取到用戶的所有的進(jìn)程。
/*
* 獲取某個(gè)進(jìn)程占用的內(nèi)存信息
*/
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
int[] pids = {userRunningAppProcessInfos.get(position).pid};
android.os.Debug.MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(pids);
int memorysize = memoryInfos[0].getTotalPrivateDirty();
tv_app_memory.setText("內(nèi)存占用為 "+ memorysize +" KB");
public class TaskInfo {
Context context ;
PackageManager pm ;
public TaskInfo(Context context) {
this.context = context;
pm = context.getPackageManager();
}
/*
* 根據(jù)包名 查詢 圖標(biāo)
*/
public Drawable getAppIcon(String packname){
try {
ApplicationInfo info = pm.getApplicationInfo(packname, 0);
return info.loadIcon(pm);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/*
*獲取程序的版本號(hào)
*/
public String getAppVersion(String packname){
try {
PackageInfo packinfo = pm.getPackageInfo(packname, 0);
return packinfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
/*
* 獲取程序的名字
*/
public String getAppName(String packname){
try {
ApplicationInfo info = pm.getApplicationInfo(packname, 0);
return info.loadLabel(pm).toString();
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/*
* 獲取程序的權(quán)限
*/
public String[] getAppPremission(String packname){
try {
PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_PERMISSIONS);
//獲取到所有的權(quán)限
return packinfo.requestedPermissions;
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
/*
* 獲取程序的簽名
*/
public String getAppSignature(String packname){
try {
PackageInfo packinfo = pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
//獲取到所有的權(quán)限
return packinfo.signatures[0].toCharsString();
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
/*
* 殺死所有進(jìn)程
*/
private void killAll() {
for (int i = 0 ; i< userRunningAppProcessInfos.size();i++){
System.out.println(userRunningAppProcessInfos.get(i).processName);
activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
}
// 更新顯示的界面
pd.show();
new Thread(){
@Override
public void run() {
initData();
Message msg = new Message();
msg.what = GET_RUNNING_APP_FINISH;
hander.sendMessage(msg);
}
}.start();
}
/*
* 殺死選擇的進(jìn)程
*/
private void killSelected() {
for (int i=0 ;i < isselected.size(); i++){
if(isselected.get(i)){ //如果用戶也選中則返回true
//終止一個(gè)activity 需要用到 activitymanager
activitymanager.restartPackage(userRunningAppProcessInfos.get(i).processName);
}
}
//更新listview的顯示
pd.show();
new Thread(){
@Override
public void run() {
initData();
Message msg = new Message();
msg.what = GET_RUNNING_APP_FINISH;
hander.sendMessage(msg);
}
}.start();
}
/* * 獲取系統(tǒng)的剩余內(nèi)存 */ ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); MemoryInfo outInfo = new ActivityManager.MemoryInfo(); am.getMemoryInfo(outInfo); long availMemorySize = outInfo.availMem; String strMemorySize = availMemorySize/1024/1024 + "MB";
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
Android UI實(shí)現(xiàn)多行文本折疊展開(kāi)效果
這篇文章主要為大家詳細(xì)介紹了Android UI實(shí)現(xiàn)多行文本折疊展開(kāi)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android回調(diào)與觀察者模式的實(shí)現(xiàn)原理
這篇文章主要為大家詳細(xì)介紹了Android回調(diào)與觀察者模式的實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
OpenHarmony如何調(diào)用電話服務(wù)API撥打電話
OpenHarmony3.1版本標(biāo)準(zhǔn)系統(tǒng)增加了通話相關(guān)的聯(lián)系人應(yīng)用,來(lái)電應(yīng)用等,在系統(tǒng)服務(wù)層面電話相關(guān)功能也比較完善,這篇文章主要介紹了OpenHarmony如何調(diào)用電話服務(wù)API撥打電話2022-11-11
android開(kāi)發(fā)教程之startActivityForResult使用方法
這篇文章主要介紹了android開(kāi)發(fā)教程之startActivityForResult使用方法,需要的朋友可以參考下2014-03-03
Android SwipeRefreshLayout下拉刷新源碼解析
這篇文章主要為大家詳細(xì)解析了Android SwipeRefreshLayout下拉刷新源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧
這篇文章主要介紹了Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配微技巧 ,需要的朋友可以參考下2018-04-04
Android程序開(kāi)發(fā)之Listview下拉刷新上拉(滑動(dòng)分頁(yè))加載更多
這篇文章主要介紹了Android程序開(kāi)發(fā)之Listview下拉刷新上拉(滑動(dòng)分頁(yè))加載更多的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07

