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