Android如何判斷乙個應用在執行

2021-06-26 07:46:55 字數 3281 閱讀 2798

原址:

android中使用activitymanager,以判斷在乙個應用中,或乙個service 、receiver中應用是否正在執行,以便進行一些相關的處理。

這個時候我們需要得到乙個activitymanager,這個manager顧名思意就是管理activity的,它有乙個方法叫getrunningtasks,可以得到當前系統正在執行的task的列表,**如下:

activitymanager am = (activitymanager)context.getsystemservice(context.activity_service); 

listlist = am.getrunningtasks(100

); for

(runningtaskinfo info : list)  

}

100表示取的最大的任務數,info.topactivity表示當前正在執行的activity,info.baseactivity表系統後台有此 程序在執行,具體要做如何判斷就看自已的業務需求。這個類還有更多的方法可以取得系統執行的服務、記憶體使用情況等的方法,請各位自行查詢。

有一點要注意,如果想正常執行此方法,請在你的 androidmanifest.xml 中加入:

<

uses-permission

android:name

="android.permission.get_tasks"

/>

否則可能會有exception丟擲。

//判斷應用是否在執行 

activitymanager am = (activitymanager)context.getsystemservice(context.activity_service); 

listlist = am.getrunningtasks(100

); boolean

false

; string my_pkg_name = "com.cyberblue.iitag"

; for

(runningtaskinfo info : list)  

} //執行中才去重啟藍芽,否則會導致安裝了這個應用後藍芽無法關閉

ifbluetoothadapter mbluetoothadapter = bluetoothadapter.getdefaultadapter(); 

if(!mbluetoothadapter.isenabled())  

}

android系統內部狀態資訊的相關api: 

得到activitymanager :

activitymanager activitymanager = (activitymanager)

this

.getsystemservice(activity_service)  

這個位查到底是什麼資訊:

configurationinfo configurationinfo = activitymanager.getdeviceconfigurationinfo();   

獲取程序記憶體狀態的資訊:

debug.memoryinfo processmemoryinfo = activitymanager.getprocessmemoryinfo(processids);  

獲取當前執行的service資訊:

listrunningserviceinfos = activitymanager.getrunningservices(maxvalue); 

獲取當前執行的任務資訊:

listrunningtaskinfos = activitymanager.getrunningtasks(maxvalue);  

其中runningtaskinfos 的 topactivity就是當前task的活躍activity 

在getrunningtasks()所返回的task佇列中系統會根據這些task的活躍度有乙個排序,越活躍越是靠前。第乙個就是當前活動的task

/**

* 檢測某activityupdate是否在當前task的棧頂

*/public

boolean

istopactivy(string cmdname) if(

null

== cmpnametemp)

return

false

; return

cmpnametemp.equals(cmdname); 

}

最後在應用中新增所需的許可權:

<

uses-permission

android:name

="android.permission.get_tasks"

/>

/**get the launcher status */

private

boolean

islauncherrunnig(context context)    

}   

}   

}   

return

result ;   

}    

private

listgetallthelauncher()   

for(

inti=

0;i< ra.size();i++)       

return

names;   

}    

android 取當前顯示的activity :

activitymanager am = (activitymanager) getsystemservice(activity_service); 

componentname cn = am.getrunningtasks(1

).get(

0).topactivity; 

log.d(""

, "pkg:"

+cn.getpackagename()); 

log.d(""

, "cls:"

+cn.getclassname());  

android如何判斷程式是否在前台執行:

private

boolean

istopactivity()   

}   

return

false

;   

}    

1 3 第乙個 Android 應用

對專案的名稱 儲存路徑 使用的語言等進行相關設定 company domain 公司網域名稱 package name 包名 根據公司網域名稱生成的 minimum sdk api 21 android 5.0 lollipop 最低版本sdk 專案中可能會用到的一些檔案 其中 mainativiy...

使用NDK c 建立乙個Android應用

新增path變數 j a home bin ndk home android sdk home platform tools ant home bin 開啟控制台,依次輸入 如果以上命令都是有效命令,安裝完成 右鍵單擊工程,android tools add native support,在彈出對話...

如何判斷乙個執行緒的存活

pthread kill 別被名字嚇到,pthread kill可不是kill,而是向執行緒傳送signal。還記得signal嗎,大部分signal的預設動作是終止程序的執行,所以,我們才要用signal 去抓訊號並加上處理函式。int pthread kill pthread t thread,...