Android實現首次點選返回鍵提示資訊,第二次點選退出應用

拭心發表於2015-06-06

要實現的效果如圖:

這裡寫圖片描述

程式碼很簡單,複寫onKeyDown方法,監聽到back鍵的點選就初始化一個時間變數,並給出一個toast。當接下來一定時間內(我這裡取的是1.5秒)再次有點選事件時,退出應用。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            long secondClickBack = System.currentTimeMillis();
            if(secondClickBack - firstClickBack >1500){
                Toast.makeText(this, "再按一次退出每一天", 0).show();
                firstClickBack = secondClickBack;
                return true;
            }else{
                MyApplication.getInstance().exitApp();
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

注意上述程式碼中有個MyApplication.getInstance().exitApp();

執行這個的前提是實現自定義個MyApplication,程式碼在後面。

我們在每個Activity的onCreate()方法中呼叫MyApplication.addActivity方法將當前activity儲存進去。等要退出應用時呼叫MyApplication.exitApp方法將所有activity都finish();

MyApplication程式碼如下:

package com.zsx.base;

import java.util.ArrayList;

import android.app.Activity;
import android.app.Application;

public class MyApplication extends Application {
    public static ArrayList<Activity> list;
    private static MyApplication myApp = null;

    //要保證每個Activity中使用的MyApplication都是同一個,就用到了單例模式
    //單例模式:只有一個物件,也就是上面的那個myApp只例項化一次
    //由於MyApplication繼承自Application,複寫的建構函式訪問許可權不能低於父類的,所以不能為private
    //所以我們在這裡實現一個偽單例模式
    public static MyApplication getInstance(){
        if(myApp == null ){
            myApp = new MyApplication();
            list = new ArrayList<Activity>();
        }
        return myApp;
    }
    /**
     * 新增activity到陣列中
     * @param activity
     */
    public void addActivity(Activity activity){
        list.add(activity);
    }

    /**
     * 退出應用,結束所有activity
     */
    public void exitApp(){
        for (Activity activity : list) {
            activity.finish();
        }
    }
}

相關文章