【问题标题】:Simulate low battery & low memory in Android在 Android 中模拟低电量和低内存
【发布时间】:2010-09-07 07:30:48
【问题描述】:

为了生成通知,我需要了解如何以编程方式生成电池电量不足和内存不足的中断。谁能提供您的建议。我知道 Intents。

【问题讨论】:

标签: android


【解决方案1】:

触发onTrimMemory 回调:

adb shell am send-trim-memory <process-name> <level>

例如adb shell am send-trim-memory com.example.app MODERATE

【讨论】:

  • 完美。我也喜欢RUNNING_CRITICAL 以获得完整的效果。
  • @MaksimDmitriev 我在使用物理设备时遇到了这个错误,但它在模拟器上对我有用
  • adb shell am send-trim-memory com.myapp MODERATEError: Failure to set the level - probably Unknown Process: com.myapp。知道为什么吗?那个包肯定存在。另外,我很难找到有关该命令的文档。
  • 解决了。错误消息是错误的(关键是“可能”这个词)。在这种情况下实际发生的是它没有识别 MODERATE,尽管它被列为有效级别。使用RUNNING_CRITICAL 有效。
  • @AutonomousApps 它不会让您发送对应用程序当前状态无效的 TRIM_MEMORY 级别。例如,如果您的应用程序在前台,那么它将无法发送任何高于 TRIM_MEMORY_RUNNING_CRITICAL 级别的修剪事件。我花了 10 多分钟才弄清楚。
【解决方案2】:

还可以使用设备开发者选项下的Background process limit 模拟低内存。

转到Settings > Developer options。在app 部分下,将Background process limit 更改为No background processes

现在,每次您切换到另一个应用时,您的活动都会被终止。用于测试状态保存和状态恢复。

【讨论】:

  • 遗憾的是,这根本不是真的。这是great explanation 这个选项的作用。
  • 我有一个启用了bg服务和推送通知的应用程序,该应用程序不会像其他应用程序一样被杀死。
【解决方案3】:

是的,如果您向 ComponentCallback2 注册上下文,特别是 ComponentCallback2#onTrimMemory,此 API 会触发相同的回调,这里没有提到,所以我想我会说清楚。此命令的语法是: am send-trim-memory [--user <USER_ID>] <PROCESS> [HIDDEN|RUNNING_MODERATE|BACKGROUND|RUNNING_LOW|MODERATE|RUNNING_CRITICAL|COMPLETE] 注意:此命令仅适用于运行 Marshmallow+ 的设备

【讨论】:

  • 非常正确。我只能让它在运行 Marshmallow 及更高版本的设备上工作。
【解决方案4】:

在安卓模拟器上你可以set the power status by connecting to the Emulator console and using the power command.

就内存不足而言,您只需要确保您的应用程序可以在后台处理被杀死而不会发出警告。测试这是在 Android 上实际需要任务管理器的极少数情况之一,或者如果您运行的是 Android 2.2,您可以通过设置终止应用程序。

There are ways of reducing the memory available to applications 但我认为它们是不必要的。

【讨论】:

  • 嗨 Dave Webb,我想以编程方式显示电池电量不足警报,即使它不是。
  • 嗨 Dave Webb,在模拟器中没问题。但是我怎么能在真实设备上做同样的事情呢..?
  • 没有办法让手机在电量不低时显示电量不足警报。
【解决方案5】:

要模拟低电量警告,请按照 Frank 回答的方式尝试此命令:

power capacity 10 // It will set the battery level into 10%

内存不足:

ulimit -Sv 15000  //The current memory limit will set to 15000 Kb

【讨论】:

  • 我在设备和 DDMS 视图中运行应用程序,我可以看到堆内存查看器,我看到分配的堆内存为 18.2 MB。使用您的命令,我将当前内存设置为 1500。那么为什么应用程序没有崩溃或分配的内存没有减少?
  • @Prem,在“telnet”到“localhost 5554”之后,我正在尝试“ulimit”命令。但它总是返回错误'KO:未知命令,尝试'帮助''。我正在使用Win7操作系统。请帮助我。
  • @IgorGanapolsky 我搜索了,它是一个 shell 内置命令,存在于大多数 Linux 操作系统中,包括 Android。所以你可以通过adb shell ulimit -Sv 15000运行它
【解决方案6】:

您可以使用的模拟器菜单是shown on my blog posting。只需在模拟器端口(默认为 5554)上 telnet 到 localhost,然后输入帮助。按照那里的说明进行操作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多