回答
Android的設計並不傾向於選擇退出應用程序,而是由操作系統來管理它。您可以通過其相應的意圖打開主頁應用:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
不建議退出您的Android應用程序。有關更多詳細信息,請參閱此question。
用戶可以始終通過主頁按鈕退出應用程序,或通過後退按鈕退出第一個活動。
我閱讀該網頁後得到的概念之下。謝謝 – poojan9118 2010-07-13 12:25:05
@janusz:按home鍵永遠不會退出android應用程序,相反它會在後臺... – Jayesh 2013-12-06 12:22:20
如果你想結束一個活動,你可以簡單地調用finish()
。 然而,在屏幕上有一個退出按鈕是不好的做法。
我用它來「你需要更新這個應用程序到最新版本」,我不希望他們繼續使用它。還是不好的做法...? – beetree 2015-01-02 00:38:57
@beetree是的。就像任何不好的做法一樣,有些情況下這是您唯一的選擇,您可以使用它,因爲嘗試做其他事情將是無意義的。與_illegal syntax_相對的是,它是_bad practice_的一個要點是它可用於少數情況,但您應該嘗試一下,找到一個更好的方法來做到這一點。在你的情況下,沒有一個。 – 2017-12-28 08:01:24
當你打電話完成onDestroy()該活動將被調用,它將返回到活動堆棧中的前一個活動...所以..退出不要調用finish();
可能是你可以嘗試在我們的應用程序是這樣的
假設,我們有一系列的活動(比如十個),我們需要直接從這個活動中退出。我們可以做的是,創造一個意圖,去根活動,並在意向設置標誌作爲
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
也一樣,布爾添加一些額外的意圖
intent.putExtra("EXIT", true);
然後在根系活力,檢查boolean
的值,並根據該呼叫結束(),在根活動
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
第一飾面的使用方法finish();
,然後你的應用程序添加下面的onDestroy線爲onDestroy()
拔出力接近
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
添加以下finish();
後行:
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
我試着使用下面的代碼片段退出應用程序,這對我很有用。希望這可以幫助你。 我做了小的演示用2個活動
第一個活動
public class MainActivity extends Activity implements OnClickListener{
private Button secondActivityBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
secondActivityBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
if(pref.getInt("exitApp", 0) == 1){
editer.putInt("exitApp", 0);
editer.commit();
finish();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.SecondActivityBtn:
Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}
您的任何其他活動
public class YourAnyActivity extends Activity implements OnClickListener {
private Button exitAppBtn;
private SharedPreferences pref;
private SharedPreferences.Editor editer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_any);
exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
exitAppBtn.setOnClickListener(this);
pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
editer = pref.edit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.exitAppBtn:
Intent main_intent = new Intent(YourAnyActivity.this,
MainActivity.class);
main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(main_intent);
editer.putInt("exitApp",1);
editer.commit();
break;
default:
break;
}
}
}
這很適合我。
關閉所有以前的活動如下:
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("Exit me", true);
startActivity(intent);
finish();
然後在MainActivity onCreate()方法添加此完成在MainActivity
setContentView(R.layout.main_layout);
if(getIntent().getBooleanExtra("Exit me", false)){
finish();
return; // add this to prevent from doing unnecessary stuffs
}
這很棒很好工作 – 2015-09-02 21:58:51
這個!爲我工作,謝謝 – Webserveis 2016-03-19 12:21:53
非常感謝! – Weaboo 2018-01-09 12:01:11
我與觀察者模式做到了。
Observer接口
public interface Observer {
public void update(Subject subject);
}
基地主題
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
public void detach(Observer observer){
observers.remove(observer);
}
protected void notifyObservers(){
for(Observer observer : observers){
observer.update(this);
}
}
}
兒童受試者,實現出口方式
public class ApplicationSubject extends Subject {
public void exit(){
notifyObservers();
}
}
所有MyApplication您的應用程序應該將其擴展
public class MyApplication extends Application {
private static ApplicationSubject applicationSubject;
public ApplicationSubject getApplicationSubject() {
if(applicationSubject == null) applicationSubject = new ApplicationSubject();
return applicationSubject;
}
}
基本活動
public abstract class BaseActivity extends Activity implements Observer {
public MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
app = (MyApplication) this.getApplication();
app.getApplicationSubject().attach(this);
}
@Override
public void finish() {
// TODO Auto-generated method stub
app.getApplicationSubject().detach(this);
super.finish();
}
/**
* exit the app
*/
public void close() {
app.getApplicationSubject().exit();
};
@Override
public void update(Subject subject) {
// TODO Auto-generated method stub
this.finish();
}
}
測試一下
public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
close(); //invoke 'close'
}
}
(我試過以前的答案,但他們在某些方面缺乏。例如,如果您在完成活動後沒有執行return;
,則會運行剩餘的活動代碼。你也需要用return來編輯onCreate。如果你不運行super.onCreate(),你會得到一個運行時錯誤)
假設你有MainActivity
和ChildActivity
。
裏面ChildActivity補充一點:
Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;
內MainActivity的onCreate補充一點:
@Override
public void onCreate(Bundle savedInstanceState) {
mContext = getApplicationContext();
super.onCreate(savedInstanceState);
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
// your current codes
// your current codes
}
一些活動,其實你不想開的時候再重新按下按鈕這樣的閃屏活動,歡迎屏幕活動,確認窗口。其實你不需要這個在活動堆棧中。你可以做到這一點使用=>打開manifest.xml文件,並添加屬性
機器人:noHistory = 「真」
這些活動。
<activity
android:name="com.example.shoppingapp.AddNewItems"
android:label=""
android:noHistory="true">
</activity>
OR
有時你想關閉某個後退按鈕按下整個應用程序。這裏最好的做法是打開主窗口,而不是退出應用程序。爲此,您需要重寫onBackPressed()方法。通常這種方法會打開堆棧中的頂級活動。
@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
OR
在後退按鈕按下你想退出該活動,你也還不想在活動堆棧中添加此。在onBackPressed()方法內調用finish()方法。它不會關閉整個應用程序。它將用於堆棧中的前一個活動。
@Override
public void onBackPressed() {
finish();
}
如果你想退出你的應用程序。然後在按鈕按下事件中使用此代碼。 ,如:
public void onBackPressed()
{
moveTaskToBack(true);
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
還有另一種選擇,使用FinishAffinity方法關閉所有任務中涉及到的應用程序堆棧。
這裏就是我所做的:
SomeActivity.java
@Override
public void onBackPressed() {
Intent newIntent = new Intent(this,QuitAppActivity.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);
finish();
}
QuitAppActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
基本上,您所做的是清除堆棧中的所有活動並啓動QuitAppActivity
,其唯一的工作是退出應用程序。
把這個代碼的功能
public void yourFunction()
{
finishAffinity();
moveTaskToBack(true);
}
//For an instance, if you want to exit an application on double click of a
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
// do something on back.
From Android 16+ you can use the following:
finishAffinity();
moveTaskToBack(true);
}
return super.onKeyDown(keyCode, event);
}
- 1. 如何退出應用程序,關閉所有活動並顯示主屏幕?
- 2. android完全退出應用程序,並進入主應用程序屏幕
- 3. Phonegap如何回到應用程序屏幕並退出應用程序iOS
- 4. 應用程序顯示屏幕旋轉後的主屏幕
- 5. 屏幕凍結,應用程序退出
- 6. Android應用程序在重複啓動並退出後顯示空白屏幕
- 7. 如何在應用程序啓動時顯示主屏幕?
- 8. 如何在其他應用程序和主屏幕上顯示「破解屏幕」應用程序的圖像
- 9. 應用程序退出並返回主屏幕,可以嘗試+處理它嗎?
- 10. Android應用程序後退按鈕顯示空白屏幕
- 11. iOS主屏幕Web應用程序不顯示更新
- 12. 的Xcode 4將不顯示應用程序的主屏幕
- 13. 應用程序如何在用戶的主屏幕上顯示橫幅廣告?
- 14. 如何使用代碼在我的XCode應用程序中顯示主屏幕?
- 15. 屏幕顯示應用程序輸出在android應用程序內
- 16. chrome應用程序如何在高dpi屏幕上顯示?
- 17. 黑莓 - 如何顯示在應用程序屏幕
- 18. 如何在應用程序啓動時顯示鎖定屏幕?
- 19. 如何在PHP Web應用程序中顯示雙屏幕
- 20. 的Android主屏幕應用程序了
- 21. Android應用程序主屏幕設計
- 22. 如何退出VB6應用程序並設置退出代碼
- 23. 返回全球屏幕而不退出應用程序
- 24. 掛機退出應用程序並顯示警報
- 25. AVD未顯示主屏幕
- 26. 如何阻止用戶退出屏幕?
- 27. 如何在SIP應用程序的主屏幕或主屏幕上獲取來電提示對話框?
- 28. Kivy應用退出屏幕變化
- 29. 我的Android應用程序不加載應用程序屏幕,只是跳到主應用程序屏幕?
- 30. 如何將Web應用程序添加到用戶主屏幕?
:非常感謝你.. – Surej 2011-12-16 10:07:39
你甚至可以使用..「moveTaskToBack(true);」 – 2012-04-04 10:12:53
建議Thanx非常有用 – user1387035 2012-08-27 13:10:50