簡單快捷的退出APP應用

看到很多的教程包括官方的api的簡單描述,雙擊返回鍵退出應用程序還用到比較傳統的計時方式,用起來很累,于是我就類了-簡單的類了。

主要業務邏輯就是利用Handler.sendEmptyMessageDelayed()延遲發送消息

Source - Code:

packagecom.samego.alic.demo01uicontrols;

importandroid.app.Activity;

importandroid.app.ActivityManager;

importandroid.content.Context;

importjava.util.LinkedList;

/**

*管理所有的activity類的集合

* Created by alic on 16-3-26.

*/

public class ActivityCollector {

//承載activity的容器

public static LinkedList<Activity> activities=new LinkedList<Activity>();

//定義一個變量,來標識是否退出

public static booleanisExit=false;

/**

*向容器里面添加activity

*@paramactivity

*/

public static void addActivity(Activity activity) {

activities.add(activity);

}

/**

*向容器里面刪除activity

*@paramactivity

*/

public static void removeActivity(Activity activity) {

activities.remove(activity);

}

/**

*遍歷finish所有的activity

*/

public static void finishAll() {

for(Activity activity : activities) {

if(!activity.isFinishing()) {

activity.finish();

}

}

}

/**

*連后臺任務都殺死 殺得一干二凈

*退出應用程序

*完全退出App的方法

*/

public static void AppExit(Context context) {

try{

ActivityCollector.finishAll();

ActivityManager activityMgr = (ActivityManager) context

.getSystemService(Context.ACTIVITY_SERVICE);

activityMgr.killBackgroundProcesses(context.getPackageName());

System.exit(0);

}catch(Exception ignored) {

}

}

}


就上面的code和我們的需求最一個簡單的說明,基本上每一個app打開使用后都有很多的activity界面,

于是上面的類就是用了LinkedList<LinkedList>用來承載每一個activity,然后利用它遍歷kill所有的activity

Using-method:

Step-one:

在onCreate()方法體里面補充

ActivityCollector.addActivity(this);

Stept-two

處理雙擊退出的業務邏輯,這一模塊那就直接看代碼【的注釋】

public booleanonKeyDown(intkeyCode,KeyEvent event) {

//監聽返回鍵點擊處理事件

if(keyCode == KeyEvent.KEYCODE_BACK) {

if(!ActivityCollector.isExit) {

ActivityCollector.isExit=true;

Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();

//利用handler延遲發送更改狀態信息? 第一個參數what是信息來源的判斷what

myHandler.sendEmptyMessageDelayed(1,2000);

}else{

ActivityCollector.AppExit(this);

}

return false;

}

return super.onKeyDown(keyCode,event);

}

//該處你懂得優化處理

Handler myHandler=new Handler() {

@Override

public voidhandleMessage(Message msg) {

super.handleMessage(msg);

switch(msg.what){

case 0:

ActivityCollector.isExit=false;

break;

}

}

};


已經完事啦,But~But~But~吐槽一下傳統的時間處理的方式吧--看!

private long exitTime=0;

public boolean onKeyDown(int keyCode,KeyEvent event){

if(keyCode==KeyEvent.KEYCODE_BACK){

if((System.currentTimeMillis()-exitTime)>2000){

Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show();

exitTime=System.currentTimeMillis();

}else{

exit();

}

return false;

}

return super.onKeyDown(keyCode,event);

}

真的完事啦~~




最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容