開機之後,初始化時,設定如下三個ps訊息cback函式:
initializeall()
mmi_phb_init_protocol()
setprotocoleventhandler(mmi_phb_ind_startup_finish, prt_phb_startup_finish_ind);
setprotocoleventhandler(mmi_phb_ind_startup_begin, prt_phb_startup_begin_ind);
setprotocoleventhandler(mmi_phb_ind_startup_read, prt_phb_startup_read_ind);
1.l4在到nvram讀取data之前,傳送訊息到mmi:prt_phb_startup_begin_ind,進入:
mmi_phb_ind_startup_begin()
初始化一些變數,準備重新reload entries.
2.l4每讀取乙個and entry,都有傳送訊息到mmi:prt_phb_startup_read_ind,進入:
mmi_phb_ind_startup_read()
l4返回訊息的結構:
typedef struct
mmi_phb_startup_read_ind_struct;
typedef struct
l4c_phb_entries_struct;
typedef struct l4c_phb_bcd_entry_struct;
mmi中,儲存**entries的全域性變數phonebook結構如下:
mmi_phb_entry_bcd_struct phonebook[max_pb_entries];
typedef struct
mmi_phb_entry_bcd_struct;
typedef struct
mmi_phb_number_bcd_struct;
typedef struct
mmi_phb_name_struct;
mmi_phb_ind_startup_read()流程
mmi_phb_ind_startup_read_next_req() /* send read confirm messaeg back to l4 */
if (mmi_sim)
mmi_phb_startup_read_entry()
把訊息儲存到全域性變數phonebook中
mmi_phb_util_make_pinyin_cache() //儲存name拼音 g_phb_name_pinyin_index
g_phb_name_index[phonebookentrycount] = store_index;
phonebookentrycount++;
else //nvram
for() //讀取一批nvram記錄
mmi_phb_startup_read_entry()
3.當l4從nvram中讀取完之後,傳送訊息prt_phb_startup_finish_ind到mmi,表示l4已經讀完了。mmi接收到這個訊息之後,開始load all entries from l4。
返回的訊息結構:
typedef struct
mmi_phb_startup_finish_ind_struct;
mi_phb_ind_startup_finish()流程
初始化g_phb_cntx中的結構
if (!g_phb_cntx.nvram_data_init)
mmi_phb_startup_finish_final_step()
mmi_phb_sort_build_name_index()
//利用分治策略和插入排序進行快速排序g_phb_name_index。
//g_phb_name_index中儲存的是phonebook中entries的儲存索引。
mmi_phb_ind_startup_finish_after_name_sort()
mmi_phb_init_build_lookup_table()
//把phonebook中以g_phb_name_index中的內容為索引的entry的號碼,轉換成ascii碼,
//然後轉換成32為int型資料,並儲存在全域性變數lookuptable中。
//注意:一併儲存的還有store_index也就是該entry在phonebook中儲存位置。
starttimer(phb_read_opt_filed_timer, 500, mmi_phb_init_populate_lookup_table);
//500ms後執行mmi_phb_init_populate_lookup_table()
//以g_phb_name_index中的內容為索引,到nvram中讀取option fields資料
//readmultirecord()。然後把讀取的資料儲存在lookuptable中。
//包括: 傳真號碼,家庭號碼,公司號碼。每讀取10次,就暫停250ms,然後繼續讀取。
//全部讀完之後,進入:mmi_phb_lookup_table_sort()
//all entries populated, begin to sort it。
//因為在裝載**號碼的時候,lookuptable中的內容是按照字母順裝載的,
//但是在裝載nvram中的傳真,家庭,公司號碼時,是按照儲存順序裝載的。
//而這裡的排序,是根據**號碼的大小來排序的。
//即:按照**號碼的大小,從小到大排列。
//當來電的時候,採取對半查詢效率就很高了。
小結:到這裡,就完成了**簿的初始化。即:
(1)從nvram,sim卡中讀取了資料,並儲存在l4中了;
(2)mmi中的全域性變數phonebook與l4中的**簿已經同步了;
(3)g_phb_name_index中按照字母的大小順序,儲存了每乙個entry在phonebook中的儲存位置;
(4)所有的號碼,包括sim卡,nvram,移動**,家庭,公司,傳真號碼,都按照大小順序,儲存在lookuptable中了,並且儲存了phonebook中的儲存位置索引。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...