2011-10-06 75 views
8

本主題繼續這樣的: Android. How to start activity without creating new one?如何重用活動?不創建活動,每次

我已閱讀,活動被破壞時,單擊後退按鈕。 當它們移動到堆棧然後再調用活動時,它們不會被銷燬。使用android:launchMode="singleTask"例如

當我單擊按鈕BACK並再次運行活動時,是否有可能不會銷燬活動?

+1

我不會建議,因爲用戶可以選擇按主頁按鈕來做到這一點(如果它需要內存,Android會殺死你的應用程序)。由於這樣的決定,用戶開始使用混亂的任務殺手(在我看來)。然後,開發人員正在努力使他們的應用程序工作,因爲用戶正在通過任務殺手來殺死他的應用程序......不要惹惱android生命週期;-) – Knickedi

+0

爲什麼你甚至想要這樣做? I.不能想到單一的好處。 – frostymarvelous

+0

一個好處是,如果活動佈局複雜並且需要10秒鐘才能被加載,然後可以節省10秒,重新使用該活動而不需要從頭開始創建它。 – Ehsan

回答

0

你可以重新定義你的活動的「onBack」的方法,像

public void onBackPressed() 
{ 
    moveTaskToBack (true); 
} 
16

返回按鈕的默認實現的東西是完成當前活動。然而,你可能會攔截那個按鍵並按照你的意願做任何事情。例如,您可以「完成」以前的活動,而不是完成當前的活動,從而使其看起來好像正常實施即將到來。

攔截後退按鈕按下:Android: intercepting back key

,並不會產生一個新的每次開始以前的活動:

Intent i = new Intent(View.getContext(), PreviousActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
startActivity(i); 

好運。

+0

+1 Thanks.It working fine –

+1

我發現這個答案很有用,但是對毫無戒心的開發人員提出了警告:當你需要一個Context時,**請不要使用Application Context **,除非你知道你在做什麼。在這種情況下,您只需傳遞'this'(當前的Activity實例)而不是Application Context。 –

+0

謝謝你們......你節省了我的時間...... !!! –

0

您可以在關閉時,你壓回button.You也可以用下面的方法禁用後退按鈕

public void onBackPressed() 
{ 
    //super.onBackPressed(); 
} 

,你也可以開始新的活動停止活動如果後退按鈕用戶點擊喜歡

public void onBackPressed() 
{ 
    startActivity(new Intent(context, newActivity.class)); 
} 

其實你應該完成活動,如果用戶按下返回按鈕 .else可以有更多的活動將駐留在回棧,所以可能會有內存問題,所以在這種情況下,Android會摧毀你的活動這些領帶已停止並且不會在很長時間內恢復。

+0

請注意:新的'onBackPressed()'方法需要API 5或更高版本。對舊設備使用onKeyDown。 –

+0

'onBackPressed()'需要API7及更高版本,所以如果我們要實現低於API5,我們必須使用onKeyDown – Dharmendra

+0

我錯過了什麼?我仍然認爲它是[API5](http://developer.android.com/reference/android/app/Activity.html#onBackPressed())。:) –