一、遞歸退出
在啓動新的activity時使用startActivityForResult,然後重寫一個OnActivityResult的方法並在次finish自己。
代碼:
在第一個頁面啓動第二個頁面時使用startActivityForResult啓動,
public void JumpB(View view){
Intent intent=new Intent(this,BActivity.class);
//第一個參數intent,指定跳轉的地方, 第二個參數請求碼,沒有太大實用
startActivityForResult(intent,0x101);
}
在這個頁面重寫onActivityResult方法,並執行finish()方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
finish();
}
當第二個頁面執行finish()方法後就會引起onActivityResult 裏面方法的執行。從而達到退出應用程序的效果 public void exit(View view){
finish(); 退出當前的Activity
}
二、棧退出
首先第一步:建立一個全局的變量application
package com.example.myapplication.Application;
import android.app.Activity;
import android.app.Application;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/6/17 0017.
*/
public class MyApplication extends Application {
//實例化一個activity集合
List<Activity> activities=new ArrayList<>();
//添加Activity的方法
public void add(Activity activity){
activities.add(activity);
}
//退出應用程序的方法
public void exit(){
for (Activity activity : activities) {
activity.finish();
}
}
}
注意:必須在AndroidManifest.xml 中配置自己的application
第二步:
在每一個Activity中得到application,並強轉爲自己的application,再將activity添加進application
MyApplication myApplication = (MyApplication) getApplication();
myApplication.add(this); //this代表當前activity
在你需要退出應用程序的地方調用 myApplication.exit();
public void exit(View view){
myApplication.exit();
}
三、拋異常退出
自定義一個錯誤,讓手機無響應程序,然後再令無響應程序不可見,就完成了拋異常退出。
四、手機返回鍵退出
1、利用時間差退出
private long oldTime = 0;
@Override
public void onBackPressed() {
long NowTime = System.currentTimeMillis();//獲取第一次按鍵時間
if((NowTime - oldTime) > 2000){//比較兩次按鍵時間差
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
oldTime = NowTime;
}
else{//退出程序
this.finish();
System.exit(0);
}
}
2、利用線程延時退出
private static boolean BackKeyPressed = false;//記錄是否有首次按鍵
@Override
public void onBackPressed() {
if(!BackKeyPressed){
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {//延時兩秒,如果超出則擦錯第一次按鍵記錄
@Override
public void run() {
BackKeyPressed = false;
}
}, 2000);
}
else{//退出程序
this.finish();
System.exit(0);
}
}