Android中ActivityManager(AM)的方法解釋和幾個使用場景介紹

1、ActivityManager是衆多系統服務中的一種.在程序中獲取am實例的方法:
ActivityManager am = context.getSystemService(ACTIVITY_SERVICE);  需要強制轉換類型
2、ActivityManager中的幾個方法的含義:
1)getRunningAppProcess();該方法返回的是一個RunningAppProcessInfo對象的集合,表示獲取當前系統內所有正在運行的進程的相關信息的集合.在此需要特別說明的是,進程是個很大的概念。一個進程中可以包含多個應用程序,在理論上,如果內存足夠大,所有應用程序都可以運行行同一個進程內(只是理論而已)。所以如果打印Log的話,可以看到processName類似於應用程序的包名,要避免該容易混淆的誤區。
在RunningAppProcessInfo封裝對象中,有processName(進程名稱),pid(進程id),String [] pkgList(進程內包含的應用程序的字符串數組),importance(進程的優先級)
2)getRunningTasks(int max);該方法返回的是一個RunningTaskInfo對象的集合,表示獲取正在運行的任務。其中RunningTaskInfo經常被用到的一個屬性就是topActivity,其封裝類型是ComponentName對象,通過該對象可以拿到棧頂topActivity的包名(getPackageName())從而拿到運行該任務的應用包名.
調用該API方法時需要在配置文件中聲明可以獲取任務列表的權限:<uses-permission android:name="android.permission.GET_TASKS" />
3)通過ActivityManager還可以獲取當前系統運行的內存的使用相關的情況.具體的使用參照如下所示:
ActivityManager.MemeoryInfo  mi = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mi);
//獲取系統剩餘的內存空間: long availNum = mi.availMem;
//獲取系統所有的內存空間: long totalNum = mi.totalMem;
4)getRunningService(int maxNum)該方法返回的是目前設備上正在運行的服務,參數表示返回的服務的一個最大數,返回值爲RunningServiceInfo對象的集合.

幾個可能用到的場景:
1)曾經做過個小Demo,其中有個需求就是,列出應用中所有安裝的應用程序,用戶可以點擊任一一個應用程序進行鎖定,設置其加鎖。也就是說的程序鎖的概念。
在這個需求當中,首要要考慮的就是用戶打開應用程序是不確定的,時間也是不確定的。所以,如果要給特定的應用程序加鎖,只能是在後臺開啓一個服務,該服務要完成的任務就是不斷的掃描用戶的操作,獲取當前的運行的最新的任務,如果一旦發現設置的特定的應用程序被運行了,就強制將用戶操作進行攔截,彈出輸入密碼的界面,判斷密碼對錯。密碼正確開啓程序。服務在後臺不斷掃描的時候就要用到ActivityManager的getRunningTask(),通過ComponmentName獲取包名(getPackage())進行比較.

2)該例子和第一個差不多,但是有點變態。如果有人想使壞,在設備上不讓某個特定的應用程序啓動。可以用到上面提到的方法。檢測用戶動作,如果是特定的應用包名,強制應用跳轉至桌面,也就達到了不讓應用啓動的目的。

熟悉Android都應該知道,ActivityManager和PackageManager經常一起出現,也最容易聯繫起來。
下次繼續說一下PackageManager的常用方法和例子.

發佈了51 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章