您是否应该中止 运行 和 Activity 的 onDestroy() 中的所有线程

Should you abort all running threads in and Activity's onDestroy()

我有一个 Activity,它在不同的线程上运行许多单独的下载任务。他们像这样在 onCreate() 中创建:

public override void OnCreate()
{
    base.OnCreate();
    workerThread = new Thread(() =>
    {
        InitialiseDownloads();
        foreach (DownloadingFile file in downloadingFiles)
            {
                Thread t = new Thread(file.StartDownload);
                threads.Add(t);
                t.Start();
            }
    });
    workerThread.Start();
}

其中 List<Thread> 个线程填充了每个要下载的文件的新线程。

如果 activity 在这些线程完成之前关闭,如果我不中止它们,它们会在 activity 被杀死后保留 运行 吗?如果是这样,这是否合适:

public override void OnDestroy()
{
    workerThread.Abort();
    foreach (Thread thread in threads)
    {
        thread.Abort();
    }
    base.OnDestroy();
}

无法保证您的 Thread 会在 Activity 被摧毁后被杀死。它可能会在不久之后被杀死,或者只要 OS 允许它就可以存活。更糟糕的是,如果您将 Activity 泄漏到您的线程中,只要线程是 运行,它就不会被销毁。

如果您希望后台任务在 Àctivity 被杀死时仍然存在,请使用 Service。为了保证它不会被 OS 杀死,你应该在前台启动它 - startForeground.