您是否应该中止 运行 和 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
.
我有一个 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
.