You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android上触发LMK事件?优先支持程序化实现

在Android上触发低内存终止(LMK)事件的方法

当然可以触发LMK事件,以下是具体实现方式和你遇到的日志问题的解决方案:

一、程序化触发方案

在应用中主动占用大量内存,迫使系统触发LMK机制终止低优先级进程:

// 建议在子线程执行,避免阻塞主线程导致ANR
new Thread(() -> {
    List<byte[]> memoryReservoir = new ArrayList<>();
    try {
        while (!Thread.currentThread().isInterrupted()) {
            // 每次申请100MB内存,可根据设备调整大小
            memoryReservoir.add(new byte[1024 * 1024 * 100]);
            Thread.sleep(500);
        }
    } catch (OutOfMemoryError e) {
        // 当前应用触发OOM时,系统大概率已经通过LMK终止了其他低优先级进程
        Log.e("MemoryHog", "当前应用OOM,LMK可能已触发");
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
}).start();

你可以在多个测试应用中同时运行这段代码,加速内存耗尽的过程。

二、修正Logcat命令

你之前的日志命令无法捕获LMK事件,因为LMK日志默认输出在events缓冲区,而非main缓冲区。正确的命令如下:

# 仅监听events缓冲区的LMK日志
adb logcat -b events -s lowmemorykiller:*

# 同时监听多个缓冲区,避免遗漏相关日志
adb logcat -b main -b system -b events -s lowmemorykiller:*

三、模拟器环境优化建议

模拟器默认分配的内存通常较高,难以触发LMK,可通过以下方式调整:

  • 调低模拟器的内存配置(建议设置为512MB或1GB);
  • 同时启动多个后台应用(比如浏览器、视频应用、游戏等);
  • 使用adb shell dumpsys meminfo实时查看系统内存状态,当Free内存趋近于临界值时,LMK会开始工作。

四、辅助调试工具与命令

  • 用adb shell procrank查看进程内存占用排名,LMK会优先终止内存占用高、优先级低的进程;
  • 可通过修改系统属性调低LMK触发阈值(不同Android版本属性名可能有差异):
# 调整后台进程的内存阈值示例
adb shell setprop ro.lmk.bg_low 100000
adb shell setprop ro.lmk.bg_high 200000

内容的提问来源于stack exchange,提问作者ir2pid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:25:01