短時(shí)間內(nèi)認(rèn)識(shí)Android開源系統(tǒng)
Android開源系統(tǒng)是GOOGLE于Google于2007年11月5日宣布,GOOGLE內(nèi)部會(huì)議據(jù)說號(hào)稱是***為移動(dòng)終端打造的真正開放和完整的Android開源系統(tǒng),不知道這個(gè)信息是不是真的很正確。
options menu就是通過按home鍵來顯示,context menu需要在view上按上2s后顯示。這兩種menu都有可以加入子菜單,子菜單不能種不能嵌套子菜單。options menu最多只能在屏幕最下面顯示6個(gè)菜單選項(xiàng),稱為icon menu,icon menu不能有checkable選項(xiàng)。多于6的菜單項(xiàng)會(huì)以more icon menu來調(diào)出。
稱為expanded menu。options menu通過activity的onCreateOptionsMenu來生成,這個(gè)函數(shù)只會(huì)在menu***次生成時(shí)調(diào)用。任何想改變options menu的想法只能在onPrepareOptionsMenu來實(shí)現(xiàn),這個(gè)函數(shù)會(huì)在menu顯示前調(diào)用。onOptionsItemSelected 用來處理選中的菜單項(xiàng)。
context menu是跟某個(gè)具體的view綁定在一起,在activity種用registerForContextMenu來為某個(gè)view注冊(cè)context menu。context menu在顯示前都會(huì)調(diào)用onCreateContextMenu來生成menu。onContextItemSelected用來處理選中的菜單項(xiàng)。
android還提供了對(duì)菜單項(xiàng)進(jìn)行分組的功能,可以把相似功能的菜單項(xiàng)分成同一個(gè)組,這樣就可以通過調(diào)用setGroupCheckable,setGroupEnabled,setGroupVisible來設(shè)置菜單屬性,而無須單獨(dú)設(shè)置。
Notepad中使用了options menu和context menu兩種菜單。首先來看生成options menu的onCreateOptionsMenu函數(shù)。這到底有何用處呢?其實(shí)這是一種動(dòng)態(tài)菜單技術(shù)(也有點(diǎn)像插件機(jī)制),若某一個(gè)activity,其類型是”android.intent.category.ALTERNATIVE”。
數(shù)據(jù)是”vnd.android.cursor.dir/vnd.google.note”的話,系統(tǒng)就會(huì)為這個(gè)activity增加一個(gè)菜單項(xiàng)。在androidmanfest.xml中查看后發(fā)現(xiàn),沒有一個(gè)activity符合條件,所以這段代碼并沒有動(dòng)態(tài)添加出任何一個(gè)菜單項(xiàng)。
對(duì)于上下文菜單項(xiàng)選中的事件處理,是通過重載onContextItemSelected實(shí)現(xiàn)的
- switch (item.getItemId()) {
- case MENU_ITEM_DELETE: {
- // Delete the note that the context menu is for
- Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);
- getContentResolver().delete(noteUri, null, null);
- return true;
- }
- }
- return false;
對(duì)于日志的刪除,首先調(diào)用ContentUris.withAppendedId(getIntent().getData(), info.id);來拼接出待刪除日志的URI.然后getContentResolver().delete(noteUri, null, null);調(diào)用下層的Content Provider去刪除此日志。
這里先不討論例子了,來看看官方文檔對(duì)Activity生命周期的介紹。
1Android開源系統(tǒng)用Activity Stack來管理多個(gè)Activity,所以呢,同一時(shí)刻只會(huì)有最頂上的那個(gè)Activity是處于active或者running狀態(tài)。其它的Activity都被壓在下面了。
2.如果非活動(dòng)的Activity仍是可見的(即如果上面壓著的是一個(gè)非全屏的Activity或透明的Activity),它是處于paused狀態(tài)的。在系統(tǒng)內(nèi)存不足的情況下,paused狀態(tài)的Activity是有可被系統(tǒng)殺掉的。只是不明白,如果它被干掉了,界面上的顯示又會(huì)變成什么模樣?看來下回有必要研究一下這種情況了。
3.幾個(gè)事件的配對(duì)可以比較清楚地理解它們的關(guān)系。Create與Destroy配成一對(duì),叫entrie lifetime,在創(chuàng)建時(shí)分配資源,則在銷毀時(shí)釋放資源;往上一點(diǎn)還有Start與Stop一對(duì),叫visible lifetime,表達(dá)的是可見與非可見這么一個(gè)過程;最頂上的就是Resume和Pause這一對(duì)了,叫foreground lifetime,表達(dá)的了是否處于激活狀態(tài)的過程。
4.因此,我們實(shí)現(xiàn)的Activity派生類,要重載兩個(gè)重要的方法:onCreate()進(jìn)行初始化操作,onPause()保存當(dāng)前操作的結(jié)果。
【編輯推薦】