У меня есть приложение для Android с TabManager. Из-за изменения API Android мне нужно обновить мое приложение для Activity, чтобы он содержал фрагмент. Чтобы обеспечить обратную совместимость, я использую ActionBarSherlock.Чтобы использовать getSherlockActivity() или getActivity() или другое?
Мое приложение работает нормально. Тем не менее, глядя на консоль разработчика Google Play, всегда есть несколько отчетов о сбоях в «java.lang.NullPointerException» в строке с помощью getSherlockActivity(), я думаю, что затронуто всего менее 0,1% от общего числа пользователей.
Например,
// Example 1
File file = new File(getSherlockActivity().getCacheDir(), "filename");
// Example 2
getSherlockActivity().setSupportProgressBarIndeterminateVisibility(false);
Мой вопрос: 1. Должен ли я изменить все getSherlockActivity() для getActivity()? Или по определенному правилу обязательно использовать один из них? 2. В чем разница между ними?
Большое спасибо.
Низкая частота ошибок говорит мне, что это может быть признаком того, что ваша деятельность была разрушена ОС ОС из-за ограничений ресурсов, а затем повторно создана, когда пользователь возвращается к ней, но не восстановлен должным образом (как правило, потому что состояние активности не сохраняется правильно). Вы можете проверить это, включив опцию разработчика «Не выполнять действия», а затем переключаясь между своей деятельностью и другим приложением, а затем обратно. Я считаю полезным сделать большую часть моей работы dev/test с включенным включением, он очищает угловые случаи, которые вы в противном случае не заметили бы до тех пор, пока не появятся отчеты о сбоях. – Phil
Спасибо всем. Удалось устранить проблему, вызванную onPostExecute AsyncTask после уничтожения Activity (нажатие кнопки возврата). Но мне интересно, почему процесс фрагментации все еще может работать, поскольку его активность уже уничтожена? – neobie
Это будет связано с тем, что AsyncTask - это просто асинхронный - и живет за пределами Activity (или Fragment), который его начал. Процитировать с сайта developer.android.com - «AsyncTasks в идеале следует использовать для коротких операций». Если задача не завершилась до того, как действие будет уничтожено, я бы сказал, что он слишком длинный. В AsyncTask JavaDoc предлагаются альтернативные подходы к работам с длительным фоном. По сути, AsyncTask должен выполнять «настоящую работу» с потока пользовательского интерфейса и останавливать чувство пользовательского интерфейса. – Phil