Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在java线程完成任务之前将其关闭(返回),活动将崩溃_Java_Android_Multithreading - Fatal编程技术网

如果在java线程完成任务之前将其关闭(返回),活动将崩溃

如果在java线程完成任务之前将其关闭(返回),活动将崩溃,java,android,multithreading,Java,Android,Multithreading,我在一个活动的Oncreate中创建了一个线程,然后在任务结束后,它对活动的UI进行更改。这项任务需要5-6秒,这就是我使用线程的原因 代码如下: Thread thread = new Thread(new Runnable() { @Override public void run() { final String folderSize = calculateFolderSize(); // my work

我在一个活动的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();
一切正常,我开始活动,然后计算大小,然后文本视图得到更新并显示大小。平均需要6秒

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


这个问题的解决方案是什么,是否有其他选择,或者我需要在该活动中停止反压线程。

似乎您的
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();

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