2010-06-10 7 views
0

Когда дело доходит до потоков и изменения ориентации, кажется, нормальная вещь, чтобы сделать что-то вроде этого:Другие темы и ориентация меняется на вопросы

public class Bwent extends Activity { 
    private static Bwent instance; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     instance = this; 
    } 

    //... 

Таким образом, если вы делаете запрос сети с нить, и кто-то изменит ориентацию телефона, поток знает, что будет использовать новую активность.

Однако возможно ли, что нить может закончиться в то время, когда Android уничтожает старую активность и создает новую?

Есть ли момент в процессе, когда нить все еще может указывать на неправильную деятельность или частично разрушенную активность?

Кажется, что не должно быть, но даже с использованием обработчика, созданного в основном потоке, у меня возникают прерывистые проблемы с потоком, пытающимся обновить объект, который больше не существует. Это редко, но это происходит.

ответ

1

Когда дело доходит до нитей и изменения ориентации, кажется нормальная вещь, чтобы сделать что-то вроде этого :

Это вещь, чтобы сделать. Я не уверен, действительно ли это «нормальная» вещь. Я сомневаюсь, что это лучшее, что можно сделать.

Однако, возможно, что нить может закончить во время Android уничтожает старую активность и создает новый?

Да. В вашем коде ничего не мешает.

Есть момент в процессе, где нить еще может указывать на неправильную активность или частично уничтожили активность?

Да. В вашем коде ничего не мешает.

Вместо этого попробуйте the pattern that I illustrate here. Используйте AsyncTask, реализованный как статический внутренний класс или открытый класс. Это тот, кто знает о Деятельности. Используйте его только в doPostExecute() (или, возможно, onPublishProgress()). С дороги AsyncTask и Handler работа, наше понимание в том, что AsyncTask всегда будет иметь Activity в тех методах основной темы.

Некоторые из этих материалов was discussed recently.

+0

Это в основном то, что я делаю. Однако кажется, что все еще есть шанс, что AsyncTask может иметь ссылку на Activity, которая в настоящее время уничтожается, когда возвращается (doPostExecute). – synic

+1

@synic: Улицы Бостона и я еще не сталкивались с этим. И если это правда, вы ничего не можете с этим поделать, кроме того, чтобы ваша деятельность избегала цикла destroy/recreate. – CommonsWare

+0

Улицы Бостона? – synic

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