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);
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章