2011-11-27 72 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(),如音乐应用服务。

用户可以通过音乐应用程序停止音乐应用程序,或者通过设置应用程序(如果它们是特别陌生的用户)停止音乐应用程序。