2011-06-03 2 views
2

Я создал Thread внутри Activity. Сначала я думал, что когда onDestroy() вызывается в Activity, тогда поток также будет убит. Но я был неправ. Поток продолжал работать.Когда я должен отменить/убить нить?

Так что я решил отменить нить внутри метода onDestroy(). Все работает нормально.

Но есть 1 проблема: onDestroy() не гарантируется. Например: активность внезапно уничтожается ОС.

Так что самое лучшее, что можно сделать в этом случае? Благодарю.

ответ

1

Вы должны сделать все, что связано с очисткой в ​​onPause(). Вы правы, что onDestroy() не всегда будет вызываться, но onPause() всегда вызывается, когда активность перемещается на задний план или убивается. Но будьте осторожны, чтобы ваш код в этом методе был очень легким, потому что активность не может идти в фоновом режиме до тех пор, пока этот метод не вернется.

+0

Я тоже думал об этом, но если вызывается только данный вид деятельности OnPause() потому что есть еще одна активность поверх нее, нет смысла отменять поток, если поток загружает что-то. – namanhams

+0

Когда вам нужно остановить поток именно тогда? Возможно, вам нужно загрузить вещи в службу, если вы хотите, чтобы загрузки продолжали работать после того, как ваша активность исчезла с экрана. Если вы выполняете некоторые фоновые задачи, вы не должны полагаться на состояние активности. – Malcolm

-2

Я бы предложил разместить Thread убийство в ApplicationonTerminate методом

public class MyApplication extends Application 
{ 
    MyThread myThread; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     myThread=new MyThread(); 
     myThread.start(); 
    } 

    @Override 
    public void onTerminate() 
    { 
     super.onTerminate(); 
     myThread.interrupt(); 
    } 
} 

Обязательно объявить MyApplication в AndroidManifest.xml

+0

-1: информация вводит в заблуждение. Из документации по этому методу от Android: «Он никогда не будет вызываться на производственном устройстве Android, где процессы удаляются, просто убивая их, при этом не выполняется код пользователя (включая этот обратный вызов)». – Malcolm

+0

никогда не знал - спасибо! – barmaley

Смежные вопросы