1. 程式人生 > >Android按back鍵不退出當前Activity

Android按back鍵不退出當前Activity

一般預設情況下,我們按back鍵的時候,會執行Activity的onDestroy方法,銷燬當前例項。

有些情況下,不想銷燬,只是想切換到後臺,即回到桌面程式。那麼有兩種方法可以設定,重寫Activity的onBackPressed()方法,或是重寫onKeyDown方法

1、使用moveTaskToBack方法:

重寫onKeyDown

@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
    if(keyCode == KeyEvent.KEYCODE_BACK){  
        moveTaskToBack(true);  
        return true;  
    }  
    return super.onKeyDown(keyCode, event);  
}  

重寫onBackPressed

@Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }

方法:public boolean moveTaskToBack(boolean nonRoot)

activity裡有這個方法,引數說明如下:

nonRoot=false→ 僅當activity為task根(即首個activity例如啟動activity之類的)時才生效

nonRoot=true→ 忽略上面的限制

這個方法不會改變task中的activity中的順序,效果基本等同於home鍵,都是回到桌面

應用場景:

比如有些activity諸如引導圖之類的,使用者在按返回鍵的時候你並不希望退出(預設就finish了),而是隻希望置後臺,就可以調這個方法

2、使用startActivity回到桌面

@Override  
public boolean onKeyDown(int keyCode, KeyEvent event) {  
    if(keyCode == KeyEvent.KEYCODE_BACK){  
        Intent i = new Intent(Intent.ACTION_MAIN);  
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
        i.addCategory(Intent.CATEGORY_HOME);  
        startActivity(i);  
        return true;  
    }  
    return super.onKeyDown(keyCode, event);  
}  
@Override
    public void onBackPressed() {
//        moveTaskToBack(true);
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
    }