以下假设从A屏幕进入B屏幕再返回A屏幕,有兴趣的朋友可以跟踪MTK代码验证一下:
EntryNewScreen(U16 new_scrn_id, exit_func_ptr new_exit_handler, entry_func_ptr new_entry_handler, void *flag) A->B 1)set global variable currTopScrnID to new_scrn_id(B) 2)call ExecuteCurrExitHandler() -> call ExecuteCurrExitHandler_Ext() ①call mmi_frm_generic_exit_scrn(currExitScrnID(A), curr_entry_handler(EntryA)) -> call mmi_frm_add_history to add A to history ②call curr_exit_handler(curr_exit_scrn_arg_p) to execute ExitA ③reset new_exit_handler and new_entry_handler NULL ④call UI_common_screen_exit() -> call ExitCategoryFunction() -> reset category function ⑤call ClearInputEventHandler(MMI_DEVICE_KEY) 3)set global variable currExitScrnID to new_scrn_id(B) 4)call mmi_frm_set_generic_exit_handler(new_scrn_id, new_exit_handler, new_entry_handler), this function will do: ①set global variable currExitScrnID to new_scrn_id(B) ②set global variable curr_exit_handler to new_exit_handler(ExitB) ③set global variable curr_entry_handler to new_entry_handler(EntryB) at a word: set currTopScrnID to B -> add A to history -> execute ExitA -> reset category function -> set currExitScrnID to B -> set curr_exit_handler to ExitB -> set curr_entry_handler to EntryB Call GoBackHistory() B back to A 1)call mmi_frm_go_back_to_history_int(historyData[currHistoryIndex].scrnID) historyData[currHistoryIndex].scrnID is now A 2)call ExecTopScrnCallbackHandler() -> call ClearDelScrnIDCallbackHandler(currExitScrnID(B), NULL) to delete history in array historyCBHandler[MAX_HISTORY] 3)call mmi_frm_remove_history_node to delete history node 4)call (*(historyData[currHistoryIndex].entryFuncPtr)) (historyData[currHistoryIndex].app_arg) to reentry A 5)set global variable currTopScrnID to new_scrn_id(A) 6)set global variable currExitScrnID to new_scrn_id(A) 7)call mmi_frm_set_generic_exit_handler(new_scrn_id, new_exit_handler, new_entry_handler), this function will do: ①set global variable currExitScrnID to new_scrn_id(A) ②set global variable curr_exit_handler to new_exit_handler(ExitA) ③set global variable curr_entry_handler to new_entry_handler(EntryA) at a word: delete history in array historyCBHandler[MAX_HISTORY] -> delete history node -> call Entry to reentry A -> set currTopScrnID to A -> set currExitScrnID to A -> set curr_exit_handler to ExitA -> set curr_entry_handler to EntryA |
MTK中EntryNewScreen进入新屏幕和GoBackHistory返回原屏幕机制
最新推荐文章于 2019-08-27 11:30:57 发布