【Android】判斷應用Application、Activity、Service是否處於活動狀態
通過ActivityManager
我們可以獲得系統里正在執行的activities,包括程序(Process)等、應用程式/包、服務(Service)、任務(Task)資訊。
1、判斷應用App是否活動
/**
* 判斷應用是否已經啟動
* @param context 一個context
* @param packageName 要判斷應用的包名
* @return boolean
*/
private boolean isAppAlive(Context context, String packageName){
ActivityManager activityManager =
(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processInfos
= activityManager.getRunningAppProcesses();
for (int i = 0; i < processInfos.size(); i++){
if(processInfos.get(i).processName.equals(packageName)){
Log.i("NotificationLaunch",
String.format("the %s is running, isAppAlive return true", packageName));
return true;
}
}
Log.i("NotificationLaunch" ,
String.format("the %s is not running, isAppAlive return false", packageName));
return false;
}
2、判斷Activity是否活動
/**
* 判斷MainActivity是否活動
* @param context 一個context
* @param activityName 要判斷Activity
* @return boolean
*/
private boolean isMainActivityAlive(Context context, String activityName){
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100 );
for (ActivityManager.RunningTaskInfo info : list) {
// 注意這裡的 topActivity 包含 packageName和className,可以打印出來看看
if (info.topActivity.toString().equals(activityName) || info.baseActivity.toString().equals(activityName)) {
Log.i(TAG,info.topActivity.getPackageName() + " info.baseActivity.getPackageName()="+info.baseActivity.getPackageName());
return true;
}
}
return false;
}
3、Activity是否顯示在前臺
/**
* 檢測某Activity是否在當前Task的棧頂
*/
private boolean isTopActivity(String activityName){
ActivityManager manager = (ActivityManager) mContext.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1);
String cmpNameTemp = null;
if(runningTaskInfos != null){
cmpNameTemp = runningTaskInfos.get(0).topActivity.toString();
}
if(cmpNameTemp == null){
return false;
}
return cmpNameTemp.equals(activityName);
}
4、Service是否在執行
/**
* 用來判斷服務是否執行.
* @param context
* @param className 判斷的服務名字
* @return true 在執行 false 不在執行
*/
public static boolean isServiceRunning(Context mContext,String className) {
boolean isRunning = false;
ActivityManager activityManager = (ActivityManager)
mContext.getSystemService(Context.ACTIVITY_SERVICE);
//此處只在前30箇中查詢,大家根據需要調整
List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30);
if (!(serviceList.size()>0)) {
return false;
}
for (int i=0; i<serviceList.size(); i++) {
if (serviceList.get(i).service.getClassName().equals(className) == true) {
isRunning = true;
break;
}
}
return isRunning;
}
參考資料
相關推薦
【Android】判斷應用Application、Activity、Service是否處於活動狀態
通過ActivityManager我們可以獲得系統里正在執行的activities,包括程序(Process)等、應用程式/包、服務(Service)、任務(Task)資訊。 1、判斷應用App是
【Android】App應用前後臺切換的一種監聽方法
Android本身並沒有提供監聽App的前後臺切換操作的方法。最近看到一種簡單巧妙的方法來監聽前後臺,這裡分享記錄一下。 一、Activity生命週期 我們知道在Android中,兩個Activity,分別為A和B。假設此時A在前臺,當A啟動B時,他們倆之間的生命週期關係如下,可
【android】簽署應用採用相同證書的用處
在應用的預期生命週期內,您應使用相同證書籤署所有 APK 應用升級:當系統安裝應用的更新時,它會比較新版本和現有版本中的證書。如果證書匹配,則系統允許更新。如果您使用不同的證書籤署新版本,則必須為應用分配另一個軟體包名稱 - 在此情況下,使用者將新版本作為全新應用安裝。 應用模組化:An
【Android】_UI設計_學生註冊、選課(無資料庫)
學生管理系統 (一) 效果實現圖 (二) 專案結構圖 (三) 具體的編碼實現 (1)註冊 (2)註冊 (3)配置檔案 (一) 效果實現圖 目標:通過一個SQLite的資料庫的操作實現學
【Android】_基於CameraHelper_拍照儲存、簡單相簿(SQLite版)
CameraSQLiteDemo 實現拍照、相簿瀏覽功能 一個簡單的CameraDemo (一)CameraSQLite Demo (二)Android&Camera&sqlite用法 (三)實
【Android】RxJava2+Retrofit2+OkHttp3的基礎、封裝和專案中的使用
前言: 近些年很火的Retrofit+RxJava+OkHttp網路請求框架,功能強大,結構合理,使用簡單方便。後面還會給大家發自己整理過的Retrofit和RxJava、RxAndroid和RxBus。希望大家點一下關注,讓我這個懶癌患者有動力繼續寫下去! 本
【Android】安卓開發之activity如何傳值到fragment,activity與fragment傳值
作者:程式設計師小冰,GitHub主頁:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我們利用acti
【android】App退出清空Activity。
1.在application中新增以下List以及方法: public List<Activity> activities; public void addActivity(Activity activity) { activities.add(act
【Android】判斷當前手機是否有虛擬按鍵
記錄一個使用反射的方式獲取當前手機是否存在虛擬按鍵(NavigationBar)的方法 //獲取是否存在NavigationBar public static boolean checkDe
【Android】安卓開發實戰之銷燬之前的全部活動
當我們使用standard方式啟動活動時,每啟動一個活動,返回棧就會將該活動入棧,有時候你想銷燬一些活動時,要不停的返回才能到達相應的活動,這種方式使用者體驗不是很好。那有沒有什麼方式可以實現一次性銷燬之前的所有活動呢?有的啦,我們一起來看一下吧。 1、首先,我們來建一個活
【Android】獲取手機中已安裝apk檔案資訊(PackageInfo、ResolveInfo)(應用圖片、應用名、包名等)
眾所周知,通過PackageManager可以獲取手機端已安裝的apk檔案的資訊,具體程式碼如下 PackageManager packageManager = this.getPackageManager(); List<PackageInfo> pac
【Android】在Activity裏如何獲得另一個xml布局文件的控件
span IT soft sans 一個 text mic blog 布局文件 有時候,我們需要在一個Activity中調用另一個xml布局文件,即非本Activity所綁定的xml布局文件中的控件,這時候就不能直接findViewById,不然會報錯指向空對象,這時就需要
【C++】判斷元素是否在vector中,對vector去重,兩個vector求交集、並集
bool iostream space col 求交集 uniq AI void print #include <iostream> #include <vector> #include <algorithm> //sort函數、交並補
【Android】原始碼分析 - Activity啟動流程
啟動Activity的方式 Activity有2種啟動的方式,一種是在Launcher介面點選應用的圖示、另一種是在應用中通過Intent進行跳轉。我們主要介紹與後者相關的啟動流程。 Intent intent = new Intent(this, TestActivity
【Android】桌面進入應用重啟問題
使用手機系統第一次安裝apk之後直接開啟,進入應用二級選單,將應用退到後臺,然後再次從桌面進入應用,出現應用重啟重新回到主選單的問題。 此問題應該算是一個廠商問題,從log來看,當從第一次開啟的應用進入到後臺之後,然後從桌面點選應用的資訊如下: 第一次安裝完之後開啟應用: Li
【Android】Application
Android應用程式開發中,有的時候我們在應用程式的任何一個地方都需要訪問一個全域性變數,也就是在任何一個Activity中都可以訪問的變數。它不會因為Activity的生命週期結束而消失。要實現應用程式級的變數,我們可以通過Application這個類來實現。 首先,我們新建一個類HelloAp
【android】應用圖示Drawable轉Bitmap,適配安卓8.0
相信大家在載入應用圖示的時候,經常會將得到的Drawable轉成Bitmap,程式碼如下: Drawable drawable = mPackageManager.getApplicationIcon(packageName); return ((BitmapDrawable) drawabl
【Android】Material Design 之四 五 六 AppBarLayout、CoordinatorLayout、CollapsingToolbarLayout使用
一、AppBarLayout AppBarLayout是繼承自LinearLayout,預設是垂直方向,可以看成是一個垂直方向的線性佈局,其作用是將APPBarLayout包裹的內容都作為AppBar,支援手勢滑動。 AppBarLayout必須作為Toolbar的父佈局
【Android】——Android四大元件之一 | Activity
Android Activity???——》一種包含使用者介面的元件,主要用於和使用者進行互動;???——》一個應用程式可以有多個; Android中的活動是可以疊加的???——》使用任務(Task)
【Android】一、Progress進度條實現的三種方式:主執行緒實現,Service載入,動態建立
前言 更新版本,上傳資料到服務端,都是需要進度顯示的,Android進度顯示兩種方式 ProgressDialog 和 ProgressBar 新版本中ProgressDialog不被推薦使用,所以專案採用ProgressBar 分為三種實現方式: 1、MainAct