Почему активность зависает при возврате из нескольких фрагментов другой активности?
У меня есть два вида деятельности A и B, у A есть 3 фрагмента, а именно a1, a2 и a3. a3 - это выбранный по умолчанию фрагмент, который показывает видео, a2 содержит один большой текстовый вид и небольшой текст редактирования в нем, а a1 содержит вид списка.
Теперь в строке заголовка действия A у меня есть кнопка, и, поскольку она находится в строке заголовка, она видна из всех трех фрагментов. При нажатии на эту кнопку я открываю Activity B. с помощью функции Follow.
public void inviteUser() {
if ( getUserType() == ACTIVE ) {
Intent intent = new Intent(this, B.class);
intent.putExtra(Constants.MEETING_ID, (long) session.getSessionId());
intent.putExtra(Constants.INVITE_FROM_SESSION, true);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP);
this.startActivityForResult(intent, RESULT_OK);
} else {
Toast.makeText(this, getString(R.string.strNotAPresenterMsg), Toast.LENGTH_LONG).show();
}
}
Внутри Б я называю егоsetResult(ResultCode) and finish()
, Теперь у меня естьдве проблемы когда яначать B с фрагментов a1 и a2,
когда я начинаю деятельностьВ из фрагмента а3, он сразу возвращается и ведет себя нормально.
Я попытался переопределить все методы жизненного цикла этих фрагментов и поместил операторы Log внутри каждого метода. Боль в том, что последовательность вызова метода является нормальной и одинаковой для обоих случаев.
Я пытался изменить флаги намерения, но безуспешно.
Я добавил фальгandroid:configChanges="keyboardHidden|orientation"
за все действия моего приложения.
Надеюсь, я объяснил проблему, на случай, если кому-то понадобится какая-то конкретная часть кода. пожалуйста, прокомментируйте. Я отредактирую вопрос и добавлю это. Помогите ребята !!!
РЕДАКТИРОВАТЬ Я тестировал в GingerBread 2.3.6, он не работал, но я только что проверил, что на эмуляторе работает JellyBean, и он работает нормально. Похоже, проблема связана с версией ОС. Любая идея ?
РЕДАКТИРОВАТЬ 2 Одним из важных моментов наблюдения является то, что когда в B я нажимаю кнопку «назад», через несколько миллисекунд вызывается onResume () предыдущего действия и их фрагменты. Но даже после этого B на экране некоторое время, и кажется, что телефон завис на несколько секунд ...
РЕДАКТИРОВАТЬ 3 Просто узнал, что onStop () и OnDestroy () из B не вызываются, когда я запускаю B из фрагмента a1 или a2. Однако они вызываются отлично, когда я на a3. Что может быть причиной этого?
В документе сказано, что «видимое время жизни действия происходит между вызовом onStart () и соответствующим вызовом onStop (). В течение этого времени пользователь может видеть действие на экране, хотя оно может не находиться на переднем плане и взаимодействуя с пользователем. "
Поскольку onStop () не гарантируется, активность ведет себя ненормально, когда она не вызывается .. Я также узнал, что в устройствах HoneyComb + она всегда вызывается. Я попытался вызвать onStop () внутри onPause (), но это не работает. Что я делаю сейчас ?