从Runnable()开始一个Activity

时间:2018-02-14 21:32:04

标签: java android

希望不是一个骗局,我尽可能地挖出来并且什么也没得到。当我输入标题时SO中的所有建议都有少于0的upvotes,所以希望我没有遵循相同的路径。基本上,我的问题是如果我在主线程上执行此操作会发生什么:

new Thread(new Runnable() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            startActivity(i);
                        }
                    });
            }
        }).start();

假设iintent,我没有其他任何事情,等等。显然这是一个非常微不足道的案例。但我想知道我是否需要对工作线程做什么?如果我这样做,我会导致内存泄漏或其他问题吗?我是否需要调用工作线程上的某些内容告诉它我不再需要它?它会不会理解它不再需要它?我只是完全误解了什么?谢谢!

2 个答案:

答案 0 :(得分:1)

嗯,我不确定这是否会起作用。但如果你这样做,可能会导致内存泄漏。

您可以通过asynctask https://github.com/greenrobot/EventBus发布活动创建活动 ,并在您的活动/片段中订阅该事件。您可以为多个活动创建基类并在其中进行订阅。所以你会在任何地方举办活动。

答案 1 :(得分:0)

完成执行后,Java Thread将变为Dead。在线程完成它的任务之前你会有一个短暂的内存泄漏(因为线程绑定到当前活动,并且在你完成你的东西之前不会销毁该活动)。

无论如何,如果你想在一些后台任务后更新ui,我会建议你使用AsynkTask。

如果您更高级,最好的解决方案是使用RxJava或实时数据。在android中我们不经常使用Thread,因为我们有其他的包装器可以简化线程之间的通信