【问题标题】:Activity crashed if we close it (back) before java thread completes the task如果我们在 java 线程完成任务之前关闭它(返回),Activity 就会崩溃
【发布时间】:2020-10-14 04:51:05
【问题描述】:

我在活动的 Oncreate 中创建了一个线程,然后在任务结束后,它会更改活动的 UI。该任务需要 5-6 秒,这就是我使用线程的原因。

代码如下:

Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                final String folderSize = calculateFolderSize(); // my work 
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(folderSize + " GB");
                    }
                });
            }
        });
        
        thread.start();

一切正常,我开始活动,然后计算大小,然后更新 textView 并显示大小。平均需要 6 秒。

问题 - 当我打开活动时,线程会在 OnCreate 方法中启动。如果我在线程完成之前按下后退按钮,那么我的应用程序会在 6 秒内崩溃(当线程完成其工作时)。

这个问题的解决方案是什么,是否有任何替代方案,或者我需要停止该活动中的后按线程。

【问题讨论】:

  • 发布错误堆栈跟踪
  • 从我这里更新(@Vijay),我们应该停止 onStop() 覆盖方法中的所有线程。如果活动已关闭,则无需运行该流程,因为他们现在不会进行任何更改。

标签: java android multithreading


【解决方案1】:

您的runOnUiThread 代码似乎在活动被破坏后调用。

您应该检查活动是否被破坏:

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                final String folderSize = calculateFolderSize(); // my work
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (!isDestroyed())
                            textView.setText(folderSize + " GB");
                    }
                });
            }
        });
        thread.start();

【讨论】:

    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2019-04-01
    相关资源
    最近更新 更多