您是否应该中止所有正在运行的线程,而Activity的onDestroy()

时间:2018-10-18 20:12:07

标签: android android-activity xamarin.android android-thread

我有一个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>线程中,每个要下载的文件都有一个新线程。

如果在这些线程完成之前关闭了活动,那么如果我不放弃它们,它们将在杀死活动后继续运行吗?如果是这样,这是否合适:

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

1 个答案:

答案 0 :(得分:2)

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

如果您希望即使Àctivity被杀死,您的后台任务也可以保留,请使用Service。为了确保它不会被操作系统杀死,您应该在前台-startForeground中启动它。