2011-06-15 113 views
-1

我們有一個很多正在進行的實時視頻流應用程序。用戶按下主頁按鈕。我希望應用程序從內存中移除。當應用程序再次被選擇時,我們有一個全新的負載。有很多進程正在進行,我們不希望手動管理所有連接,流等。這就是我們的iPhone版本的應用程序的工作原理。退出Android應用程序 - 殺死所有進程

我讀過這樣的:Is quitting an application frowned upon?

我真的不關心機器人會設計模式,在這裏無論哪種方式。然而,如果有人有一種優雅,簡單的方式,當按下主頁按鈕時,所有我的活動將從堆棧中移除,然後當應用程序重新加載時,它將以新的主要活動開始,這將非常棒。此外,我似乎無法調試時,在onKeyDown中按Home鍵。它根本不註冊。 (keyCode == KeyEvent.KEYCODE_HOME)是我的支票。它拿起後退按鈕等。

有什麼想法?

+1

可能的重複[殺死所有活動,當按下HOME鍵時android。](http://stackoverflow.com/questions/5308088/kill-all-activities-when-home-key-is-pressed-android) – Squonk 2011-06-15 17:56:25

+0

您可以遍歷所有活動,並在每個活動上調用finish()。除非你還有一個服務正在運行? – 2012-09-12 17:30:16

+0

這個問題接受了錯誤的答案。 – 2016-03-11 04:49:16

回答

0
int p = android.os.Process.myPid(); 
android.os.Process.killProcess(p); 
+0

你真的讀過這個問題嗎? – 2012-09-12 15:53:35

+0

開始的「我真的不關心Android設計模式」的那一點怎麼樣?你讀過嗎? – 2012-09-12 21:08:44

+0

此解決方案不保證應用程序以任何方式,形狀或形式從內存中移除!你甚至不明白'從記憶中移除'的意思嗎?如果你這樣做,那麼你會知道你不能強制Android'刪除'任何東西,除非你重新啓動你的手機或卸載你的應用程序。所以,除非你知道如何爲你的手機創建根目錄並修改系統文件,否則你可以忘記強迫Android用這樣一個愚蠢的策略來殺死你的應用。你爲什麼認爲任務殺手不工作? 在這種情況下,請遵循有關完成活動和解除綁定/停止服務的Android設計指南。 – 2012-09-15 18:32:11

3

您可以撥打電話system.exit(0);,但我仍然建議遵循Android指南,並清理onPause()或類似方法中的所有內容(應該是)。

+0

system.exit(0)不是保證殺死應用程序的方法。 Android操作系統可能會重置應用的活動堆棧。 – 2012-09-28 18:39:32

1

你可以重寫onPause方法並使用finish()函數嗎?

0

你可以做比按鈕點擊。定義任何靜態方法,如exit()並定義

android.os.Process.killProcess(android.os.Process.myPid());在退出方法

在主要或第一個活動。

然後在按鈕單擊時調用此方法。

+0

這並不能保證您的活動將從堆棧中移除。 – 2012-09-28 18:38:33

0

如果要清除所有活動從堆棧中,您可以播放從啓動到退出這樣的活動的目的:

Intent broadcastIntent = new Intent(); 
broadcastIntent.setAction("CLEAR_STACK"); 
sendBroadcast(broadcastIntent); 

而在要你的活動中的每一個從堆棧中被清除,您可以創建一個BroadcastReceiver有一個內部類:

class ActivitiesBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    finish(); 
    } 
} 

而且在OnCreate註冊您的廣播接收器()方法:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction("CLEAR_STACK"); 
BroadcastReceiver r; 
r = new ActivitiesBroadcastReceiver(); 
registerReceiver(r, intentFilter);