【问题标题】:How can i avoid android background process starvation?我怎样才能避免android后台进程饥饿?
【发布时间】:2015-05-17 07:58:18
【问题描述】:

我正在使用 Runtime.exec() 从 Android 应用程序运行本机后台进程。

似乎每隔几秒钟进程就会进入休眠状态 200 毫秒。
看起来 android 操作系统正在使该进程处于饥饿状态。

有什么方法可以将进程优先级从后台进程更改为其他类型的优先级?

假设运行进程的应用程序可以获得超级用户访问权限。

编辑:

我用来运行进程的命令:

String fullCommand = "export LD_LIBRARY_PATH=LD_LIBRARY_PATH:. && ./MyProc";

Runtime.getRuntime().exec(new String[]{"su", "-c ", fullCommand });

【问题讨论】:

  • 您是从应用程序内部启动此进程吗?你能发布一个代码是如何启动这个过程的吗?
  • 几个问题:1.你确定你的本地运行时有su权限(不是应用程序)? 2. 运行时不是为长时间的动作而构建的,你在那里运行什么?

标签: android process su thread-priority


【解决方案1】:

如果你知道进程的PID,你可以用renice改变它的优先级 (taken from this answer)。

您可以像这样拨打renice

renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]

【讨论】:

  • 我可能做错了,但这似乎没有效果
【解决方案2】:

尝试使用 .setPriority() 方法。

 Thread t=new Thread();
 t.setPriority(Thread.MAX_PRIORITY);

【讨论】:

  • 它作为一个进程运行,大约有 20 个线程,看起来整个进程正在暂停大约 200 毫秒。所有线程都冻结了。
  • 这是一个本地进程。不是java进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
相关资源
最近更新 更多