Если вы прервете все запущенные потоки в Activity и onDestroy () - PullRequest
0 голосов
/ 18 октября 2018

У меня есть активность, которая запускает несколько отдельных задач загрузки в разных потоках.Они создаются в 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 голосов
/ 18 октября 2018

Нет никакой гарантии, что ваш Thread будет убит после уничтожения Activity.Он может быть убит сразу после этого или может остаться в живых до тех пор, пока ОС это позволяет.Что еще хуже, если вы пропустите свой Activity в ваш поток, он не будет уничтожен, пока поток работает.

Если вы хотите, чтобы фоновая задача выжила, даже если Àctivity убит, используйте Service.Чтобы гарантировать, что ОС не уничтожит его, вы должны запустить его на переднем плане - startForeground.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...