0

我有一个线程优先级设置为后台的处理程序线程,

myHandlerThread = new HandlerThread(HANDLER_THREAD_NAME, Process.THREAD_PRIORITY_BACKGROUND);

在这个myHandlerThread我正在做一些操作来通过调用来改变系统属性

SystemProperties.set(property, propertyValue);

我经常遇到这个异常,

[Events]
java.lang.RuntimeException: failed to set system property
at android.os.SystemProperties.native_set(Native Method)
at android.os.SystemProperties.set(SystemProperties.java:130)

可能有多种原因可能导致这种情况

1) 执行此代码时,本机代码可能已超时。

2) 由于线程被赋予优先级BACKGROUND,因此当 CPU 忙时它可能没有时间执行并且可能在最后超时。

将线程优先级提高到NORMAL会有所帮助吗?或者线程将如何超时?或者可能导致此问题的其他原因是什么?

4

1 回答 1

1
    myHandlerThread = new HandlerThread(HANDLER_THREAD_NAME,
Process.THREAD_PRIORITY_BACKGROUND);

Process.THREAD_PRIORITY_BACKGROUND 的值 = 10

如您所知,在 Java 中,每个线程都有自己的优先级,具体取决于创建它的线程。我们也可以像上面的代码一样更改这些优先级。

默认情况下,java 提供 0-10 之间的优先级范围。但是我们可以通过使用Process.setThreadPriority()来增加比例,它提供 (+/- 20) 之间的比例。

Runnable r = ...
Thread thread = new Thread( new Runnable() {
   public void run() {
     android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE);
     r.run();
   }
});

因此,目前您的上述代码等效于 Thread.setPriority() ,它仅将处理程序线程优先级设置为 10(规模最小(0-10))。

我认为第一个可能是您上面提到的原因:

1) 执行此代码时,本机代码可能已超时。

于 2019-09-11T18:50:50.570 回答