一、递归退出
在启动新的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);
}
}