1

我正在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 等,但我认为在这种情况下不会有任何不同。(或者会吗?)

4

1 回答 1

0

您的应用在此行导致 ANR thread.join():。该调用导致当前线程在继续之前等待另一个线程死亡。如果在主线程上调用它,而另一个线程需要超过 5 秒才能继续,这将导致 ANR。根据您要执行的操作,最好不要join在线程上调用并在线程即将完成时调用观察者。

有关如何实现观察者的示例,请参阅http://stackoverflow.com/questions/994840/how-to-create-our-own-listener-interface-in-android

于 2020-01-02T06:30:03.240 回答