Android雙擊退出及bug的解決辦法
雙擊退出
最近在做項目的時候在主MainActivity加了個雙擊退出的功能。
關鍵代碼片段如下:
long currentTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
if(System.currentTimeMillis() - currentTime >2000){
Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
currentTime = System.currentTimeMillis();
}else{
MyApplication. getInstance().exit();
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
bug描述
這段代碼本身是沒有bug的,當我們沒有其他跳轉操作時是可以正常退出的,可是當我們從主頁跳到其他activity再跳回來的時候會發現雙擊退出只是finish掉了當前activity,然後顯示堆棧中處於此activity下面的activity,這樣顯然不是我們想要的結果,所以我們要對這種情況進行一次處理。
bug解決辦法
bug解決辦法(一)
這也是最簡單的一種,在每次從其他頁面跳轉到主activity時將跳轉前的頁面銷燬掉,直接在跳轉完成後調用:
onDestroy();
bug解決辦法(二)
在Application中將模式設置成只能放置一個activity:
加入如下代碼:
//單例模式中獲取唯一的MyApplication實例
public static MyApplication getInstance()
{
if(null == instance)
{
instance = new MyApplication();
}
return instance;
}
//添加Activity到容器中
public void addActivity(Activity activity)
{
activityList.add(activity);
}
//遍歷所有Activity並finish
public void exit()
{
for(Activity activity:activityList)
{
activity.finish();
}
System.exit(0);
}