2011-05-07 155 views
3

我有兩項活動,第一項活動由啓動器啓動,第二項活動由第一項啓動。當我在第一個靈敏度內殺死進程時,進程被終止。但是當我從第二項活動中殺死它時,系統會立即啓動一個新流程和第一項活動。 (該進程的PID已更改。)我該如何幹淨地做到這一點?我嘗試了3種不同的方法來終止進程:System.exit(0),android.os.Process.killProcess(pid),並且從Eclipse的Devices面板以非編程方式。如何殺死一個進程?

以下是我實驗過的兩個世界上最簡單的活動。它們都是各自文件中的外部類。

public class FirstActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ((Button)findViewById(R.id.button)).setOnClickListener(
      new OnClickListener() { 
       public void onClick(View v) { 
        startActivity(new Intent(FirstActivity.this, 
         SecondActivity.class)); 
     }}); 
    } 
} 

public class SecondActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_2); 
     ((Button)findViewById(R.id.button)).setOnClickListener( 
      new OnClickListener() { 
       public void onClick(View v) { 
        // Method 1 
        int pid = android.os.Process.myPid(); 
        android.os.Process.killProcess(pid); 
        // Method 2 
        System.exit(0); 
     }}); 
    } 
} 

(我知道人們會說一個人永遠不能提供一個UI退出程序,但是這是出於安全原因,用戶必須有辦法退出程序並關閉文件,以便贏得了他的信息「T被泄露。)

+0

考慮用startActivityForResult開始第二個活動,然後使用setResult和finish()將第二個活動的消息傳回第一個活動。然後在onActivityResult中捕獲消息。打開信息並打電話完成?如果有必要,在第一次活動。 – JAL 2011-05-07 20:13:48

回答

6

您可以嘗試this.finish()

其他選擇殺不通知的android系統,它假設一些用戶想要做的已經崩潰並重新啓動它的進程。

但是,您關於關閉防止數據泄露的活動的假設是錯誤的。如果您想提供註銷按鈕,請執行此操作並使其取消任何訪問令牌/密鑰用於獲取訪問權限。

還想一下,如果某些其他活動在沒有用戶退出的情況下進入前臺會發生什麼情況 - 例如,如果他們接到電話會怎麼樣?

+0

感謝您的回覆。我想過使用finish()但還沒有嘗試過。但就我而言,在開始第二項活動之前使用finish()並不是一個解決方案 - 他可能想回去。所以唯一的方法是:在殺死第二項活動之前,如果可能的話,我需要清理系統的歷史。 (註銷意味着他不想(也不能)再使用該軟件,那麼爲什麼還要在系統中留下一個無用的過程呢?這就是爲什麼我要徹底殺死它。應用程序有一個計時器,以殺死進程,當它在後臺,或在FG中不活動。) – wwyt 2011-05-07 19:55:37

+1

它取決於android,而不是你決定殺死你的進程 - 這就是它的工作原理,而且你發現與它戰鬥並沒有'工作 – 2011-05-07 20:43:10

0

我已經有了這個問題,而我更新的Android。 我已經創建了兩個活動,並從一個佈局切換到另一個佈局,但是當我殺死第二個活動的過程時,第一個活動將恢復();並顯示第一個佈局。

你的問題的答案是:在第一次活動簡歷你必須打完();方法onResume()方法。

2

只是我的想法,在啓動第二個活動(此行),

startActivity(new Intent(FirstActivity.this,SecondActivity.class)); 

你可以殺死的第一個活動。通過,

int pid = android.os.Process.myPid(); 
android.os.Process.killProcess(pid); 

所以,現在的第一個活動沒有來。

的另一種方式,

你可以第一個活動的進程ID和發送的進程id到第二個活動,通過捆綁。

首先殺死第一個活動過程,然後你可以殺死第二個活動過程。

所以,現在第一次活動沒有來。

0

系統。出口(0);通過使用此全部當前進程將被kill