Android學(xué)習(xí)---解析一段代碼

寫在前面 :

由于公司戰(zhàn)略問題,現(xiàn)在轉(zhuǎn)戰(zhàn) java 后臺 , 但是自己還是想在 Android 開發(fā)方面做的深入點,正值項目間隙,重溫我親愛的 Android ,做 Android 開發(fā)時期很多細(xì)節(jié)問題自己也沒有意識到,現(xiàn)在慢慢深入。

實例代碼

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addCategory(Intent.CATEGORY_HOME);
            startActivity(intent);
            //android.os.Process.killProcess(android.os.Process.myPid());
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
實現(xiàn)功能:監(jiān)聽物理按鍵,點擊返回按鍵退出程序

onKeyDown

  • onKeyDown方法 :該方法是接口* KeyEvent.Callback *中的抽象方法,所有的View全部實現(xiàn)了該接口并重寫了該方法,該方法用來捕捉手機鍵盤被按下的事件。
  • 方法參數(shù)(int keyCode, KeyEvent event)
    • keyCode :手機鍵盤被按下的鍵盤碼(手機鍵盤的每個按鈕都有單獨的鍵盤碼),程序通過鍵盤碼知道用戶的哪一個鍵。
    • event : 按鍵事件的對象(包含觸發(fā)事件的詳細(xì)信息、事件類型等信息),當(dāng)用戶按下按鍵時,系統(tǒng)會自動將事件封裝成KeyEvent對象供應(yīng)用程序使用。
  • 返回值--boolean : 當(dāng)返回true時,表示已經(jīng)完整地處理了這個事件,并不希望其他的回調(diào)方法再次進行處理,而當(dāng)返回false時,表示并沒有完全處理完該事件,更希望其他回調(diào)方法繼續(xù)對其進行處理

onKeyDown()和onBackpress()方法區(qū)別

  • Android 2.0之前需要監(jiān)聽按鍵事件,進行判斷是不是按下了back鍵
  • Android 2.0之后系統(tǒng)提供了一個onBackPressed()方法,這個方法就是專門用來監(jiān)聽back鍵事件的,所以只需重寫onBackPressed()方法即可。
@Override
public void onBackPressed() { 
    //實現(xiàn)Home鍵效果 
    //super.onBackPressed();這句話一定要注掉,不然又去調(diào)用默認(rèn)的back處理方式了 
    Intent i= new Intent(Intent.ACTION_MAIN); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addCategory(Intent.CATEGORY_HOME); 
    startActivity(i);  
}

Activity啟動模式 :

系統(tǒng)提供了兩種方式來設(shè)置一個Activity的啟動模式:AndroidMainifest 啟動方式和 Intent Flag 啟動方式 , 著中談一下 Intent Flag 啟動方式 。
** 通過設(shè)置Intent的Flag的方式來設(shè)置Acitivity的啟動方式 **

  • Intent.FLAG_ACTIVITY_NEW_TASK
 使用一個新的 Task 來啟動一個 Activity ,但是啟動的每個 Activity 都將在一個新的 Task 中 ( 不然 NEW_TASK 這個稱號不是白費了嗎 )。這種方式通常使用在 Service 中啟動 Activity 的情況,由于在 Service 中不存在 Activity 棧。所以使用該 Flag 來創(chuàng)建一個新的 Activity 棧。并創(chuàng)建新的 Acitivity 實例 。
  • Intent.FLAG_ACTIVITY_SINGLE_TOP

使用 singletop 模式來啟動一個 Activity ,與指定 android : lanchMode= "singleTop"效果相同 。

  • Intent.FLAG_ACTIVITY_CLEAR_TOP

使用 SingeTask 模式來啟動一個 Acitivity ,與指定 android : lanchuMode="singleTask"效果相同 。

  • Intent.FlAG_ACTIVITY_NO_HISTORY

使用這種模式來啟動 Acitivity , 當(dāng)該 Activity 啟動其他 Activity 后,該 Activity 就消失了,不會保留在 Acitivity 棧中 。栗子 -- Activity 棧中有A-B,B以這種方式啟動 C ,C 也以這種方式啟動 D ,那么此時 Activity 棧中保留的 Acitivity 為 ABD。

Intent 匹配規(guī)則

  • action
  • action 是一個字符串 ,區(qū)別大小寫, 表明了將要執(zhí)行的動作 ( 包括啟動 Activity 的動作和接收廣播的標(biāo)準(zhǔn)動作)。
  • 在 Intent 中必須包含 action ,而 category 不同 。
  • 匹配規(guī)則中可以同時有多個action,但是Intent中的action只需與 其中之一 相同即可匹配成功 。
  • category
  • 和 action 一樣是字符串 。
  • 匹配規(guī)則中必須添加“android.intent.category.DEFAULT”這個過濾條件 。
    Intent中可以不設(shè)置category,這個時候你在使用startActivity或者startActivityForResult的時候,
    其實系統(tǒng)自動會為你添加1中的那個默認(rèn)category 。
  • Intent中可以同時設(shè)置多個category,一旦設(shè)置多個catrgory,
    那么每個category都必須能夠和過濾條件中的某個category匹配成功 。
  • data
  • 表示操作數(shù)據(jù)的 URI 和 MIME 類型 。
  • Intent中的data必須和過濾規(guī)則中的某一個data完全匹配 。
  • 過濾規(guī)則中可以沒有指定URI,但是系統(tǒng)會賦予其默認(rèn)值:content和file 。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 1.什么是Activity?問的不太多,說點有深度的 四大組件之一,一般的,一個用戶交互界面對應(yīng)一個activit...
    JoonyLee閱讀 5,855評論 2 51
  • 連著幾天,跟隨群里晨讀,貓叔給每本書都做了精要核心的規(guī)整,每天的晨讀文章都會反反復(fù)復(fù)看上好幾遍,也聽播音好幾遍。每...
    靜亦境閱讀 203評論 2 0
  • 我是日記星球241號星寶寶王益軍,我正在參加日記星球第五期蛻變之旅,這是我的第21篇原創(chuàng)日記。 今天是日記星球最后...
    王益軍閱讀 203評論 0 0
  • 古代,少數(shù)民族姑娘是怎么談戀愛的? 《周禮》記載:“仲春之月,令會男女,奔者不禁?!币馑际钦f春暖花開的時候,男女約...
    作家路生閱讀 413評論 0 1

友情鏈接更多精彩內(nèi)容