2010-03-01 138 views

回答

36

在您開始新活動後,立即使用startActivity,確保您撥打finish(),以便當前活動不會疊加在新活動後面。

編輯 至於您的評論:

什麼你的建議是不是特別怎麼Android應用流量通常工作,以及用戶如何期望它的工作。 如果你真的想要做的是確保每個導致該活動的startActivitystartActivityForResult,並且有一個onActivityResult偵聽器,用於檢查退出代碼並檢查退出代碼。您可以read more about that here。基本上,在完成某項活動之前使用setResult,設定您所選擇的退出代碼,如果你的父活動接收到退出代碼,將其設置在活動,並完成一個,等...

+1

我想你不明白的情況下,我的問題是,當特定的一個活動用戶點擊它,我選擇按後退按鈕在它應該調用exit從應用 – 2010-03-01 09:05:17

+0

好吧,看我的編輯。 – 2010-03-01 09:29:25

2

爲什麼用戶不能點擊主頁按鈕?然後,他們可以從任何活動中退出您的應用,而不僅僅是特定的活動。

如果您擔心應用程序在後臺繼續執行某些操作。確保在相關的onPause和onStop命令中停止它(當用戶按下Home時會觸發它)。

如果您的問題是您希望下一次用戶點擊您的應用程序以便在開始時重新開始,我建議在屏幕上放置某種菜單項或UI按鈕,以使用戶回到開始你的應用程序的活動。就像在官方Twitter應用Twitter的小鳥等

78

在我家的活動我重寫「onBackPressed」到:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

因此如果用戶是在家裏活動,並按回來,他去到主屏幕。

我把代碼Going to home screen Programmatically

+0

優秀,正是我所需要的。 – 2012-06-04 08:06:05

+0

有人可以更深入地描述這是如何工作的?如果用戶一直按下按鈕,然後重新啓動應用程序,活動堆棧不會無限增長嗎? – pete 2013-08-28 22:27:01

+0

優秀,它的工作「如廣告」:) – s0nica 2014-02-12 10:59:33

23

更好的用戶體驗:

/** 
* Back button listener. 
* Will close the application if the back button pressed twice. 
*/ 
@Override 
public void onBackPressed() 
{ 
    if(backButtonCount >= 1) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
    else 
    { 
     Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
     backButtonCount++; 
    } 
} 
+1

偉大的工作。我會添加一些其他的東西是將一個成員變量設置爲Toast.makeText調用(例如Toast myToast = Toast.makeText()),然後在backButtonCount> = 1上使用該變量,在該面包上調用.cancel()。爲了達到我的目的,我延長了Toast.LENGTH_LONG的持續時間,因爲對於文本的數量來說,持續時間似乎很短。我的用戶是老年人。此外,可能很明顯,backButtonCount是一個成員變量設置爲0,也應該在您的第一個if語句中設置爲0。 – 2013-09-01 16:42:30

+0

我還加入了「android.os.Process.killProcess(android.os.Process.myPid());」所以我的應用程序被終止並重新啓動,如果用戶再次點擊它 – 2016-12-22 13:54:19

0

使用方法finish() onBack method of your current_activity

完成您current_activity,然後添加下面的current_activity的的onDestroy線,去除強制關閉

@Override 
public void onDestroy() 
{ 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    super.onDestroy(); 
} 
1

如果後端堆棧中沒有任何活動,應用程序將只會退出。因此,在您的清單的Android加入這一行:noHistory =「真」到所有你不想回到stacked.And然後關閉該應用程序調用完成()在OnBackPressed

<activity android:name=".activities.DemoActivity" 
      android:screenOrientation="portrait" 
      **android:noHistory="true"** 
      /> 
活動
1

首先,Android不建議你在後退按鈕中這樣做,而是使用提供的生命週期方法。後退按鈕不應該銷燬活動。

活動正被添加到堆棧中,當從UI堆棧中最後剩下的活動按下後退按鈕時,可以從概述(自5.0版中引入材料設計後的方形按鈕)進行訪問。如果用戶想要關閉應用程序,他們應該從概覽菜單中將其關閉(關閉)。

您的應用程序負責停止onPause(),onStop()和onDestroy()生命週期方法中的任何後臺任務和您不想運行的任務。請閱讀更多有關生命週期和它們的正確實施此:http://developer.android.com/training/basics/activity-lifecycle/stopping.html

但是,爲了回答你的問題,你可以做黑客來實現你想要的,確切的行爲,但正如我所說,我們不建議

@Override 
public void onBackPressed() { 

// make sure you have this outcommented 
// super.onBackPressed(); 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
} 
1

要退出Android應用程序,只需簡單地使用。 在你的主要活動,或者您也可以使用Android清單文件設置

android:noHistory="true" 
2

使用onBackPressed方法

@Override 
public void onBackPressed() { 
    finish(); 
    super.onBackPressed(); 
} 

這將解決您的問題。

0

我修改@Vlad_Spays回答,以便後退按鈕正常工作,除非它是堆棧中的最後一項,然後在退出應用程序之前提示用戶。

@Override 
public void onBackPressed(){ 
    if (isTaskRoot()){ 
     if (backButtonCount >= 1){ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     }else{ 
      Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
      backButtonCount++; 
     } 
    }else{ 
     super.onBackPressed(); 
    } 
} 
相關問題