2013-07-11 106 views
0

我正在編寫Andoid應用程序,以便在電池壽命低於某個級別時出現一個對話框,其中包含如何保存電池的選項。其中一種選擇是使用ActivityManager.killBackgroundProcesses()關閉所有後臺應用程序/服務(進程)。代碼如下所示:殺死後臺進程以節省電量的Android應用程序

public void TaskKiller(View view){ 
List<ApplicationInfo> packages; 
PackageManager pm; 
pm = getPackageManager(); 
packages = pm.getInstalledApplications(0); 


ActivityManager mActivityManager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE); 

for (ApplicationInfo packageInfo : packages) { 


mActivityManager.killBackgroundProcesses(packageInfo.packageName); 
}  
} 

然而,當我點擊調用TaskKiller()和關閉後臺進程的按鈕,一些應用程序(電子郵件,谷歌地圖)的立即開始重新啓動的過程中他。如何更改我的代碼,以便這些應用程序保持關閉狀態,直到它們重新打開爲止?此外,這種方法在節能方面是否明智,還是我以錯誤的方式攻擊?

回答

1

我不認爲這是處理問題的正確方法。 這些應用程序具有廣播接收器,這意味着無論什麼時候發生事情(例如,AC插入/ WiFi開啓),他們都會重新啓動服務,並且我認爲沒有辦法在沒有root的情況下停止該服務,並且實際禁用廣播接收器。 你可以製造出每5分鐘殺死一次的東西,但這不會對電池友好。

0

我不認爲這是一個好主意,強行關閉地圖應用程序每次,它在Android的一個bug,我認爲..

答案之一是如下: 「 其實,地圖始終運行當您的手機Gmail應用中的帳戶設置下的「常規同步設置」中勾選「背景數據」時,不幸的是,爲了讓您的電話服務提供商提供呼叫和發短信,同步背景數據是必要的(儘管互聯網訪問仍然可以不需要這個選項會被選中),取消勾選這個選項將會從正在運行的應用程序中刪除地圖(&任何其他需要它的應用程序),從而縮短電池使用時間並加快手機速度,但是如果您想撥打電話s,文本或使用需要Backround同步的應用程序,您必須擁有此Ckeckmarked。如果你想要做的只是瀏覽網...取消選中它。目前還沒有其他合法的解決方案來解決這個問題。希望這是有益...

詳見本期(https://code.google.com/p/android/issues/detail?id=10251

+0

這是不是一個錯誤。大部分的應用程序都有'broadcastReceivers'這是由Android的自動重新啓動。考慮到機器人允許你在不重新啓動的情況下殺死所有的'broadcastReceivers',然後重要的接收器如TIME_TICK,BATTERY_LOW接收器也將被殺死,這將造成一場浩劫。 –