Android作業系統本身就是一個巨大的開源軟體倉庫,熟悉它既可以瞭解到Android系統的設計架構,也可以獲得高效的應用程式編寫方式。本文所分析的源碼來自於Google官方的AOSP源碼4.0.1_r1,手機的Android版本是CM 4.2.2。對於Android系統分析而言,手機的作業系統版本和源碼版本有些不一致的地方不會有太大的影響,但是如果需要將源碼中的修改安裝到手機裡面的話,最不容易遇到問題的辦法就是保持手機中系統的版本和源碼的版本完全一致了。
確定了簡訊app的報名以及主Activity之後,可以通過軟體搜尋(這裡用的是everything)確定簡訊app在源碼中的位置是 packages\apps\Mms\src\com\android\mms\ui,並且簡訊app的啟動activity就是繼承自ListActivity的ConversationList。
1)ActionBar的構造
在onCreateOptionsMenu函數中通過匯入conversation_list_menu載入menu項目。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_compose_new"="@string/new_message"="@drawable/ic_menu_msg_compose_holo_dark"="always|withText" /> <item android:id="@+id/search"="@string/menu_search"="@drawable/ic_menu_search_holo_dark"="ifRoom|collapseActionView"="android.widget.SearchView" /> <item android:id="@+id/action_settings"="@string/menu_preferences"="@android:drawable/ic_menu_preferences" /> <item android:id="@+id/action_delete_all"="@string/menu_delete_all"="@drawable/ic_menu_trash_holo_dark" /> <item android:id="@+id/action_debug_dump"="@string/menu_debug_dump" /></menu>
oncreate函數中的setupActionBar(),從功能上看是用來設定Actionbar的view的,並且可以顯示未讀簡訊的條數,但是在CM的手機上沒有看到對應的view。
== (ViewGroup)LayoutInflater.from(|=
2)listview的構造
在oncreate()中設定listview的屬性,其中setOnCreateContextMenuListener設定了ContextMenu,通過這個選項的設定,在使用者單擊了listview一欄之後,調用onContextItemSelected函數中的MENU_VIEW: {openThread(threadId);break;
mQueryHandler = = View emptyView =
initListAdapter();
listview的初始化,oncreate函數中的initListAdapter()如下:
= ConversationListAdapter(,