当活动的线程和视图被销毁时会发生什么?

Ten*_*r04 6 android

我有一个活动可能会在用户按下并完成()活动时运行线程.那时候那些线程会发生什么?除非我在onDestroy()中断它们,否则它们都会尝试完成吗?

例如,下面的代码是不安全的,因为如果活动在线程之前完成,我的视图和游标可能会被销毁?

我问的原因是我在完成尚未成功调试的活动时偶尔会崩溃,因为它们很少发生,而且从未在我处于调试模式时发生.我已经开始检查我的视图对象是否为null,然后在runOnUIThread()中对它们执行任何操作.不确定这是否是最干净的解决方案,或者根本不是问题.

new Thread()(
public void run(){
    crunchOnSomethingForAwhile(mCursor);
    MyActivity.this.runOnUIThread(new Runnable(){
        public void run(){
            mTextView.setText("thread complete");
            mCursor.close();
        }
    }
}
).start();
Run Code Online (Sandbox Code Playgroud)

Ten*_*r04 1

有人在另一个线程上发布了一个答案,onDestroy 将所有视图引用设置为 null,最后将 Activity 引用设置为 null。因此,我假设最好的做法是在 onDestroy 中中断所有正在运行的线程,或者至少在任何 runInUIThread 方法中捕获 NullPointerExceptions。