您的位置:首页 > 其它

MTK 内存管理简单总结 4

2013-03-11 22:03 239 查看
MTK的ASM一套内存管理机制,也就是当共享内存不足时,可以要求后台应有释放共享内存,从而来保证应用的正常运行。这套机制的实现在AppMemMgr.c里面,下面具体分析一下。1 mmi_frm_appmem_prompt_to_release_mem,当调用 applib_mem_ap_alloc 分配共享内存失败时,调用该函数,弹出“内存不足(out of memory)”提示框,让用户选择想要停止得后台应用程序来释放内存。

mmi_frm_appmem_prompt_to_release_mem
这个函数里只是初始化了些信息和保存了参数,参数 app_name 和 app_icon 是应有的名称和图片id,required_size是需要获得内存的大小,success_callback 是当释放内存完毕后,会回调这个函数。2,mmi_frm_appmem_entry_prompt_screen 显示使用ASM共享内存的后台应用程序,让用户选择关闭

mmi_frm_appmem_entry_prompt_screen
3 applib_mem_ap_get_current_usage 这个函数是获得当前正在后台运行的应有程序 可以获得应用的name,icon,使用的内存大小。

applib_mem_ap_get_current_usage
MTK 内存管理简单总结 4 提到,当内存不足时,可以调用 mmi_frm_appmem_prompt_to_release_mem 来显示后台应用,让用户去选择关闭后台应用释放内存,下面看一下具体流程当选者某一后台应用,选择stop 按键时,会触发 mmi_frm_appmem_prompt_screen_stop_highlighted 函数 (触发过程跟MTK的UI事件机制想关,以后分析)。[code]

mmi_frm_appmem_prompt_screen_stop_highlighted

该函数没有做什么,只是通过选择list 选项 来获得应该被stop的后台应用id。接着进入到确认界面 ( mmi_frm_appmem_entry_stop_confirm_screen ), 当用户选择yes后,进入到mmi_frm_appmem_stop_confirm_screen_yes 函数,这个函数执行真正的释放内存动作
static void mmi_frm_appmem_stop_confirm_screen_yes(void) {     g_mmi_frm_appmem_prompt.stop_state = MMI_FRM_APPMEM_STOP_STATE_WAITING;      //调用相应应用注册的函数,通知应用却释放内存     //这个就是为什么应用要用共享内存前,需要调用 applib_mem_ap_register 来注册的原因     applib_mem_ap_stop_app_by_MMI_task(g_mmi_frm_appmem_prompt.app_id_confirm_to_stop);      MMI_TRACE(MMI_FW_TRC_G1_FRM, MMI_FRM_ASM_STOP_CONFIRM_YES,                  g_mmi_frm_appmem_prompt.app_id_confirm_to_stop,                 g_mmi_frm_appmem_prompt.stop_state);     //判断释放是否完成,如果没有完成,那么显示正在处理界面     //这里不直接认为回调完应用的就直接认为内存释放了,是因为     //应用stop的过程有可能是一个异步操作,这一点需要特别注意     if (g_mmi_frm_appmem_prompt.stop_state != MMI_FRM_APPMEM_STOP_STATE_FINISHED)     {         /* mmi_frm_appmem_stop_finished_handler() was not invoked inside            applib_mem_ap_stop_app_by_MMI_task(), we display progressing            screen to wait for mmi_frm_appmem_stop_finished_handler() */          mmi_frm_appmem_entry_progressing_screen();     }  }
注意点:相应的app 在释放完毕内存后,一定要调用 applib_mem_ap_notify_stop_finished 来通知 ASM内存管理器,内存释放成功或者失败。该函数最后会调用 mmi_frm_appmem_stop_finished_handler 来通知 内存管理器,内存释放结果。这套机制,回调函数调来调去,一开始让人有点晕,不过这么设计主要是考虑应用的异步性,有些应用停止是一些异步动作,需要等到异步动作结束才能知道最后结果。转自:http://blog.csdn.net/yanwuxufeng/archive/2010/07/17/5743273.aspx[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: