2011-02-07 44 views
7

tôi muốn giết tất cả các nhiệm vụ chạy trong android như nhiệm vụ kẻ giết người ... Những gì tôi đã làm cho đến bây giờ là:nhiệm vụ android giết

ActivityManager manager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
    List<RunningAppProcessInfo> activityes = ((ActivityManager) manager).getRunningAppProcesses(); 

    for (int i = 0; i < activityes.size(); i++){ 

     Log.e("APP: "+i, activityes.get(0).processName); 

     if (!activityes.get(0).processName.equals("app.android.myapp")){ 
      Process.killProcess(activityes.get(0).pid); 
     } 

    } 

Vấn đề với mã là nó trả về trong activityes chỉ liệt kê ứng dụng của tôi trong 12 lần. Và không có tác vụ nào bị giết ...

Ai đó có thể giúp tôi không? Cảm ơn bạn!

+2

Vì vậy, không có cách nào để tiêu diệt các tác vụ khác trên Android? @Cata: Bạn đã tìm hiểu cách thức này có thể được thực hiện? – user489152

Trả lời

9

Bạn không có quyền giết các quy trình khác; do đó, killProcess() không hoạt động cho ứng dụng của bạn.

+0

có nhưng nó không có tác dụng gì để đóng một lực? Tôi có quyền android: name = "android.permission.GET_TASKS" và trong nhật ký tôi có thể thấy: com.svox.pico Gửi tín hiệu. PID: 328 SIG: 9 jp.co.omronsoft.openwnn Gửi tín hiệu. PID: 141 IG: 9 hệ thống Gửi tín hiệu. PID: 71 SIG: 9 com.android.defcontainer Gửi tín hiệu. PID: 176 SIG: 9 com.android.launcher Gửi tín hiệu. PID: 190 SIG: 9 android.process.media Gửi tín hiệu. PID: 260 SIG: 9 com.android.quicksearchbox : Gửi tín hiệu. PID: 234 SIG: 9 com.android.protips Gửi tín hiệu. PID: 243 SIG: 9 ... – Cata

+0

@Cata: "vâng nhưng nó không có tác dụng gì khi đóng một lực lượng?" - không. Vui lòng đọc tài liệu cho 'killProcess()'. – CommonsWare

+0

Tôi đã đọc nó, và nó nói "Giết quá trình với PID đã cho." và nó không nói rằng tôi cần một số quyền ... – Cata

4

Bạn đang sử dụng (không) thay vì i bên trong vòng lặp của bạn.

for (int i = 0; i < activityes.size(); i++){ 

    Log.e("APP: "+i, activityes.get(i).processName); 

    if (!activityes.get(i).processName.equals("app.android.myapp")){ 
     Process.killProcess(activityes.get(i).pid); 
    } 

} 

Cheers

+0

Có, bây giờ tôi đã nhận thấy =)) Tôi rất chóng mặt ngày hôm nay ... vấn đề là điều này không đóng các ứng dụng. Bây giờ tôi có thể nhìn thấy chúng nhưng mã này không đóng chúng. – Cata

2

Bạn có thể giết chết quá trình hiện trên lưng ép sử dụng đoạn mã sau:

public void onBackPressed() { 
    super.onBackPressed(); 
    int pid = android.os.Process.myPid(); 
    android.os.Process.killProcess(pid); 
+0

cảm ơn rất nhiều – krisDrOid

+0

lý do tại sao trên pressesd trở lại, là nó một số loại hack ?! – Behnam

1

Bạn có thể thử này để giết nhiệm vụ hoặc ứng dụng của bạn:

ActivityManager am = (ActivityManager) ctx 
       .getSystemService(ctx.ACTIVITY_SERVICE); 
am.killBackgroundProcesses(packageName); 

làm việc này cho 2.2 trở lên.

0

1- Add để biểu lộ

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 

2 - Trong code của bạn

Runtime.getRuntime().exec("adb shell killall com.example.app"); 

lưu ý rằng ứng dụng của bạn cần phải có quyền truy cập vào adb shell (hệ thống ứng dụng)

Các vấn đề liên quan