Я повторно представляю этот вопрос, так как я не думаю, что мой последний действительно попал в проблему, с которой я столкнулся.Тема: Возврат к пользовательскому интерфейсу - Не создана?
Так что я поток, который возвращается, а затем использует обработчик для обновления пользовательского интерфейса, как:
public void completeSignIn(final boolean success, final String error) {
Log.d(Constants.LogTag, "Finalising Sign In...");
final Looper mainLooper = Looper.getMainLooper();
final Handler mainHandler = new Handler(mainLooper);
mainHandler.post(new Runnable() {
@Override
public void run() {
if (success) {
TextView tv = (TextView) getActivity().findViewById(R.id.register);
tv.setText("SIGNED IN!!");
} else if (!success) {
}
}
});
}
Проблема, которую я имею, что поскольку поток может вернуться в любой момент после того, как это делается запрашивая сервер, нет gaurantee, что getActivity() вернет Activity. Я обнаружил, что если я поверну свое устройство, когда поток вот-вот вернется, этот бит кода можно вызвать между циклами destroy/create. Я не уверен, что важно использовать фрагмент здесь, но я не думаю, что есть вред в использовании родительской активности для обновления представлений?
Так что я не уверен, как я могу заставить обработчика ждать, пока действие не будет создано - возможно ли это, или это стандартный способ борьбы с этим? Как я не вижу этого в других приложениях, которые я тестировал.
UPDATE
Я положил некоторые журналы в моем фрагменте и удалось получить следующие чтобы проиллюстрировать мою проблему:
07-09 22: 17: 15.164 25435-25435 /? D/Kevins_Tag: Отделяющая деятельность ...
07-09 22: 17: 15.234 25435-26702 /? D/Kevins_Tag: Подписание ...
07-09 22: 17: 15.234 25435-26702 /? E/Kevins_Tag: Деятельность равна нулю
07-09 22: 17: 15.234 25435-26687 /? D/Kevins_Tag: Завершение регистрации ...
07-09 22: 17: 15.284 25435-25435 /? D/Kevins_Tag: Присоединение ...
07-09 22: 17: 15.284 25435-25435 /? D/Kevins_Tag: активность Exists
Как вы можете видеть, поток вызывает интерфейс между ними отсоединиться и прикрепить ...
'Я обнаружил, что если я поверну свое устройство, когда поток вот-вот. «Активность» воссоздается. См. Http://stackoverflow.com/questions/2620917/how-to-handle-an-asynctask-during-screen-rotation и http://stackoverflow.com/questions/7128670/best-practice-asynctask-during- change-change –
Моя проблема не в том, что поток перезапускается при повторном создании активности. Я знаю, как я должен справиться с этим (рабочие фрагменты). Моя проблема в том, что когда поток возвращается к пользовательскому интерфейсу, он может быть между удалением и созданием. Я также не думаю, что просто отключение изменений конфигурации является хорошим решением. Я знаю, что должен быть правильный способ справиться с этим, но я действительно изо всех сил пытаюсь его найти, –
'Моя проблема не в том, что поток перезапускается при повторном создании активности. Прочтите ссылки. –