1

我有一个 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();
}
4

1 回答 1

2

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

如果您希望后台任务即使在Àctivity被杀死时也能存活,请使用Service. 为了保证它不会被操作系统杀死,你应该在前台启动它 - startForeground.

于 2018-10-18T20:26:27.507 回答