Я тестирую ситуацию, когда пользователь заходит в мое приложение после того, как система завершила процесс приложения из-за нехватки ОЗУ.Я наблюдаю неожиданное поведение и надеюсь получить некоторую помощь.
В моем приложении есть действие, позволяющее назвать его ActivityA
, которое немедленно создает фрагмент Fragment A
и выполняет замену фрагмента.FragmentA
отображает ListView
с двумя элементами в нем.Если пользователь щелкает первый элемент, создается второй фрагмент Fragment B
, который заменяет FragmentA
.В противном случае создается еще один FragmentA
, который заменяет исходный FragmentA
.Я пытаюсь создать дерево каталогов файлов.FragmentA
для каталогов, FragmentB
для файлов.
Допустим, пользователь нажимает на файл.Это этап теста, когда пользователь переключается на другое приложение, и система завершает процесс моего приложения из-за нехватки памяти.Затем пользователь возвращается в мое приложение, ожидая, что все останется так, как было.Однако в действительности Fragment A
(родительский каталог) отображается вместо Fragment B
(файл).Когда пользователь нажимает кнопку «Назад», отображается Fragment B
(файл).Что я делаю не так, что приводит к тому, что система восстанавливает backstack таким образом?
Вот пример программы, которая дополнительно показывает, что делает мое приложение:
// ActivityA.java
public class ActivityA extends AppCompatActivity implements onItemClickListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
FragmentA fragA = new FragmentA();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragA);
fragmentTransaction.commit();
}
@Override
public void onItemClick(AdapterView<?> aView, View v, int position, long id)
{
if (position == 0)
{
FragmentB fragB = new FragmentB();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragB);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
else
{
FragmentB fragA = new FragmentA();
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransation.replace(R.id.basic_frame, fragA);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
}