也许你可以帮忙.
是否有可能获得Processes在Android系统中运行的所有内容的列表,并杀死其中一些?我知道有一些应用程序(task managers),但我想编写自己的简单应用程序.
我想编写简单的任务管理器,只列出所有进程和按钮,它们会杀死其中的一些.
你能写一些我可以调用的Java方法来获取进程列表,以及杀死它们的方法.或者只是给我一些建议.
sea*_*ges 40
在Android中杀死应用/服务通常是一个非常糟糕的主意.虽然可以编写task killer应用程序,但不应该鼓励开发/调试之外的任何事情.
任务管理是Android O/S的责任,您可以看到的任务不是进程(例如,您在Windows任务管理器中看到的进程),事实上,当Android告诉他们时,他们只有一个进程他们可以有一个.
这些任务管理工具经常会破坏应用程序,因为它们通常无法从强制终止中恢复,特别是当它们忙于写入文件或在被杀死时使用其他资源时.它还使手机用户误以为所列出的应用实际上是在他们的手机上运行,而他们通常不会.这在[ActivityManager docs] [1]中有解释:
您可以检索有关系统中当前"正在运行"的特定任务的信息.请注意,正在运行的任务并不意味着给定的任务实际上有一个正在运行的进程; 它只是意味着用户已经转到它并且从未关闭它,但是当前系统可能已经杀死了它的进程并且只保持其最后状态以便在用户返回时重新启动它.
当您running在TaskKiller或Quick System Info等应用程序中看到应用程序列表时,其中许多应用程序实际上并未运行,它们处于暂停状态.这些应用程序不会消耗系统资源,因为Android已决定停止它们直到再次需要它们.然而,当你杀死他们时,你没有给他们时间干净地关闭,并且当你下次尝试启动它们时,你会被提出一个不友好的力量关闭对话框.我已经看到应用程序完全中断,即使重新安装无效,因为他们试图读取SD卡上的损坏文件,或者他们使用非官方的API调用.
简而言之,朋友们不要让朋友在Android中使用任务杀手.
无论如何,要回答您的问题,ActivityManager大多数这些应用程序用于列出处于运行/暂停状态的活动.
freetaskmanager是其中一个正在使用的示例task managers.
小智 7
// Get currently running application processes
List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses();
if(list != null){
for(int i=0;i<list.size();++i){
if("com.android.email".matches(list.get(i).processName)){
int pid = android.os.Process.getUidForName("com.android.email");
android.os.Process.killProcess(pid);
}else{
mTextVIew.append(list.get(i).processName + "\n");
}
}
}
/*
// Get currently running service
List<ActivityManager.RunningServiceInfo> list = servMng.getRunningServices(1024);
if(list != null){
for(int i=0;i<list.size();++i){
mTextVIew.append(list.get(i).service.getClassName() + "\n");
}
}
*/
/*
// Get currently running tasks
List<ActivityManager.RunningTaskInfo> list = servMng.getRunningTasks(1024);
if(list != null){
for(int i=0;i<list.size();++i){
mTextVIew.append(list.get(i).toString() + "\n");
}
}
*/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48278 次 |
| 最近记录: |