爲什麼要關閉組件?
在用到組件時,有時候我們可能暫時性的不使用組件,但又不想把組件kill掉,比如創建了一個broadcastReceiver廣播監聽器,用來想監聽第一次開機啓動後獲得系統的許多相關信息,並保存在文件中,這樣以後每次開機啓動就不需要再去啓動該服務了,也就是說如果沒有把receiver關閉掉,就算是不做數據處理,但程序卻還一直在後臺運行會消耗電量和內存,這時候就需要把這個receiver給關閉掉。
如何關閉組件?
關閉組件其實並不難,只要創建packageManager對象和ComponentName對象,並調用packageManager對象的setComponentEnabledSetting方法。
public void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
componentName:組件名稱newState:組件新的狀態,可以設置三個值,分別是如下:
不可用狀態:COMPONENT_ENABLED_STATE_DISABLED
可用狀態:COMPONENT_ENABLED_STATE_ENABLED
默認狀態:COMPONENT_ENABLED_STATE_DEFAULT
flags:行爲標籤,值可以是DONT_KILL_APP或者0。 0說明殺死包含該組件的app
public int getComponentEnabledSetting(ComponentName componentName)
獲取組件的狀態
實例:
實例一:禁止開機啓動的Receiver(可以是第三方的receiver)
final
ComponentName receiver = new ComponentName(context,需要禁止的receiver);
final PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP); }
實例二:隱藏應用圖標
如果設置一個app的mainActivity爲COMPONENT_ENABLED_STATE_DISABLED狀態
則不會再launcher的程序圖標中發現該app
PackageManager packageManager = getPackageManager(); ComponentName componentName = new ComponentName(this, StartActivity.class); int res = packageManager.getComponentEnabledSetting(componentName); if (res == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || res == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) { // 隱藏應用圖標 packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); } else { // 顯示應用圖標 packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); }