Android: 'threadid=3: reacting to signal 3' 执行长任务时
Android: 'threadid=3: reacting to signal 3' when executing long task
我正在我的应用程序中执行带有 Runtime.getRuntime().exec(cmd)
的命令。由于完成执行需要很长时间(几分钟),所以我将它放在一个线程中。但是使用线程方法,应用程序也会中途暂停,我看到这条消息:
threadid=3: reacting to signal 3
Wrote stack traces to '/data/anr/traces.txt'
以下是我使用的代码:
Thread thread = new Thread() {
public void run() {
Process process = Runtime.getRuntime().exec(cmd);
//cmd : command to be executed
process.waitFor();
}
};
thread.start();
thread.join();
我在这里错过了什么?如何防止我的应用程序因处理时间过长而被暂停?
注意:我知道还有其他方法,例如 AsyncTask 等,但我认为在这种情况下不会有任何不同。 (或者会吗?)
您的应用在这条线路上引发了 ANR:thread.join()
。该调用导致当前线程在继续之前等待另一个线程死亡。如果这是在主线程上调用的,而另一个线程需要超过 5 秒才能继续,这将导致 ANR。根据您要执行的操作,最好不要在线程上调用 join
并在线程即将完成时调用观察者。
有关如何实施观察者的示例,请参阅
我正在我的应用程序中执行带有 Runtime.getRuntime().exec(cmd)
的命令。由于完成执行需要很长时间(几分钟),所以我将它放在一个线程中。但是使用线程方法,应用程序也会中途暂停,我看到这条消息:
threadid=3: reacting to signal 3
Wrote stack traces to '/data/anr/traces.txt'
以下是我使用的代码:
Thread thread = new Thread() {
public void run() {
Process process = Runtime.getRuntime().exec(cmd);
//cmd : command to be executed
process.waitFor();
}
};
thread.start();
thread.join();
我在这里错过了什么?如何防止我的应用程序因处理时间过长而被暂停?
注意:我知道还有其他方法,例如 AsyncTask 等,但我认为在这种情况下不会有任何不同。 (或者会吗?)
您的应用在这条线路上引发了 ANR:thread.join()
。该调用导致当前线程在继续之前等待另一个线程死亡。如果这是在主线程上调用的,而另一个线程需要超过 5 秒才能继续,这将导致 ANR。根据您要执行的操作,最好不要在线程上调用 join
并在线程即将完成时调用观察者。
有关如何实施观察者的示例,请参阅