• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps FragmentManager backstack why Fragments are removed when app resumes

marcelpreda

Member
Hi there,

Any experience with FragmentManager and the onResume() callback?

I have next problem with an application that use Fragments.
Here is the situation:
  1. app starts with having as visible a fragment A.
  2. when a button is pressed a new fragment B is added on backstack and an AsyncTask thread starts in background. It is doing some scanning on internal flash and external SD card so it may take some time (seconds , eventually up to one minute).
  3. at the end of async thread fragment B is replaced by other Fragment C.
By default all works fine, but if I'm opening other app immediately after step 2 has started and then I open again my app what I see is initial fragment A , fragment B is not present/visible anymore.
Fragment B is actually a progress bar (my own class named ProgressDialog), that shows the progress done by AsyncTask thread.


The code where the fragment B is added on backstack and starts the async task is next one:
FragmentManager fm = getSupportFragmentManager();
mainProgressDialog = new ProgressDialog();
fm.beginTransaction().add(R.id.worker_fragment, mainProgressDialog).
addToBackStack("Compare similar files").commit();
fm.executePendingTransactions();

mainProgressDialog.setOnCancelListener(this);

// GroupFilesTask extends AsyncTask <...>
gft = new GroupFilesTask(this, selectedMountPoints);

gft.execute();



I did some debug: to test how many entries I have on the backstack when activity is visible again [ onResume() callback], and it is present.
But for some reason during onPostResume() callback, the FragmentManger is removing my fragment B from backstack.
See below messages in logcat.

// Override onResum to count number of entries on stackback
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onResume: Resume
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: There are 1 entries
12-30 18:44:42.004 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ Backstack log: entry 0: Compare similar files

// For some reason my ProgressDialog fragment is removed
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: mName=null mIndex=-1 mCommitted=false
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Operations:
12-30 18:44:42.005 19293-19293/ro.notnull.IdenticalFilesFinder D/FragmentManager: Op #0: REMOVE ProgressDialog{8342967 #1 id=0x7f0c006c}


// here is the stack trace, noticed AppCompatActivity#onPostResume call
12-30 18:44:42.019 19293-19293/ro.notnull.IdenticalFilesFinder D/ZZZ onBackStackChanged: dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:580)
ro.notnull.IdenticalFilesFinder.MainActivity.onBackStackChanged(MainActivity.java:555)
android.support.v4.app.FragmentManagerImpl.reportBackStackChanged(FragmentManager.java:2528)
android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2228)
android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2155)
android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2064)
android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:379)
android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:499)
android.support.v7.app.AppCompatActivity.onPostResume(AppCompatActivity.java:172)
android.app.Activity.performResume(Activity.java:6359)
android.app.ActivityThread.performResumeActivity(ActivityThread.java:3113)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3155)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1401)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5459)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
 
Back
Top Bottom