Android:'threadid = 3:执行长任务时对信号3做出反应

问题描述 投票:1回答: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等,但是在这种情况下,我认为它不会有任何不同。 (或者会吗?)

android multithreading android-asynctask android-anr-dialog android-runonuithread
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.