MTK 内存管理简单总结 5

本文详细介绍了MTK平台中,当内存不足时如何通过用户交互释放后台应用内存的过程。从mmi_frm_appmem_prompt_to_release_mem开始,用户选择stop应用后,经过mmi_frm_appmem_prompt_screen_stop_highlighted、mmi_frm_appmem_entry_stop_confirm_screen和mmi_frm_appmem_stop_confirm_screen_yes等函数,最终执行内存释放。重点强调了应用在释放内存后必须调用applib_mem_ap_notify_stop_finished通知ASM内存管理器,确保异步操作的正确处理。
摘要由CSDN通过智能技术生成

MTK 内存管理简单总结 4 提到,当内存不足时,可以调用 mmi_frm_appmem_prompt_to_release_mem 来显示后台应用,

让用户去选择关闭后台应用释放内存,下面看一下具体流程

当选者某一后台应用,选择stop 按键时,会触发 mmi_frm_appmem_prompt_screen_stop_highlighted 函数 (触发过程跟MTK的UI事件机制想关,以后分析)。

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 来通知 内存管理器,内存释放结果。

这套机制,回调函数调来调去,一开始让人有点晕,不过这么设计主要是考虑应用的异步性,有些应用停止是一些异步动作,

需要等到异步动作结束才能知道最后结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值