Android—退出应用程序


一、递归退出

 在启动新的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);
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值