2011-11-27 95 views
1

我正在做一個關於殺死運行服務的簡單活動。 我發現一個方法「killBackgroundProcesses」來殺死後臺應用或服務。 我試圖殺死後臺應用程序和服務。 正在運行的應用程序和一些服務被殺死,但特別是音樂服務是永遠不會被殺死的......如何殺音樂服務?

我想製作一個殺死背景音樂服務的simeple應用程序。 該應用程序只有一個按鈕(名稱是「殺死音樂」) 如果用戶單擊該按鈕,背景音樂應該被殺死。

音樂播放默認音樂播放器.. 我怎麼能殺死背景音樂? 還有其他殺音樂服務的方法嗎?

這裏是我的代碼,我試過.. 任何建議將不勝感激。 謝謝。

public class Android32_TaskKillerActivity extends Activity { 
ActivityManager manager; 
List<RunningServiceInfo> list; 
String str=""; //to contain running Servies name and write on Toast message. 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button bt = (Button)findViewById(R.id.button1); //to kill All Services 
    manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    list = manager.getRunningServices(300); //save current Servies to List 

    bt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      for(int i=0; i<list.size(); i++){ 
       RunningServiceInfo info = list.get(i); 
       String temp = info.service.getPackageName(); 
        str += temp+"\n"; 
       manager.killBackgroundProcesses(temp);//killing services one by one to the end. 

      } 
      Toast.makeText(getBaseContext(), "All Services are finished \n" + str, 3000).show(); 

     } 
    }); 

} 
} 
+0

你正在說明應用程序不允許再做這種事情的原因。 ;)你只想殺掉音樂服務,但是你的代碼使用了所有**運行服務的列表。更糟糕的是,它正在通過一系列運行服務的陳舊列表,這些服務在第一次創建活動時被填充。任務殺手級應用程序有導致其他應用程序發生故障的歷史(包括鬧鐘!),導致深感沮喪的用戶無法輕易知道原因。應用程序以這種方式破壞系統的能力已被刪除。 – adamp

回答

2

我想打一個simeple應用程序,它是殺害背景音樂服務。該應用程序只有一個按鈕(名稱是「殺死音樂」)如果用戶單擊按鈕,背景音樂應該被殺死。

這是不可能的。

killBackgroundProcesses()將殺死背景進程。然而,「背景」這個詞有多種定義(相反,「前景」)。音樂應用程序調用startForeground()來向Android表明它是前景用戶體驗的一部分,並且如果可能的話,由於內存條件較低不應該關閉。

引述killBackgroundProcesses()文檔:

這是相同的內核殺死那些過程來回收存儲器;系統將根據需要照顧未來重新啓動這些過程。

因此,killBackgroundProcesses()不應該被殺死使用startForeground(),如音樂應用服務。

用戶可以通過音樂應用程序停止音樂應用程序,或者通過設置應用程序(如果它們是特別陌生的用戶)停止音樂應用程序。