在一个activity或者fragment中新建一个线程,activity销毁后,新建的线程也会销毁吗

在一个activity或者fragment中新建一个线程,activity销毁后,新建的线程也会销毁吗

阅读 5.8k
4 个回答

不会


线程何时销毁?

进程销毁的时候,它才会销毁。所以这个问题就变成——进程何时销毁。

进程何时销毁?

为了节省下次启动的时间,Android会尽可能的将进程驻留于内存中——按HOME键、返回键都不会销毁进程,只有在系统需要回收内存的时候才销毁进程。

用户的以下操作会造成进程被销毁:

  • 将应用从“最近应用”列表移除

  • 到“设置”里停止该应用

程序员如何让线程随Activity销毁

一个可行的方案是:

  • 在线程的run方法里处理InterruptedException异常

  • 在Activity的onStop()函数里interrupt线程

代码如下:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private Thread thread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        this.thread = new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        TimeUnit.SECONDS.sleep(1);
                    } catch (InterruptedException e) {
                        // 跳出循环,线程会完成运行
                        break;
                    }
                    Log.d(TAG, "run: t " + System.currentTimeMillis());
                }
            }
        };
        this.thread.start();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (this.thread != null) {
            this.thread.interrupt();
        }
    }

}

在activity中开启的线程不会随着activity的销毁而销毁。

不会销毁,只有在线程里面的内容执行完成才可以。

activity被finish()掉后,只是销毁了主线程,子线程没有被销毁

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题