Intent.FLAG_ACTIVITY_NEW_TASK is doing What we think it should do ?

from the CommonsWare Community archives

At August 30, 2018, 3:13pm, hackzcorporation asked:

Looks like every tutorial that we have got out there on the web mentions that FLAG_ACTIVITY_NEW_TASK starts a new task if the activity we are starting is not currently running in the task.But it seems that using FLAG_ACTIVITY_NEW_TASK doesn’t Creates a new task always, it is only creating a new task if there is no task available for the activity we need to run like when we start an activity from a BroadCastReceiver using the context inside onReceive() .

According to the all the tutorials on the web,

Suppose we have got following activities in our backStack-

A->B->C

Now If We want to start a new Activity D, then it should start in a New Task, but this doesn’t seems to happens and the activity D is Started in the Same task and we have out final backstack

A->B->C->D

AnyOne Who Can Clarify?

I know setting taskAffinity will force to create a new task but this brings another problem:

Try Yourself:

Suppose we launch two Activity:

A-B

Then again we launch one other Activity with android:taskAffinity**,So now we have got**

A-B | C
A-B (on the same task)
C (on other task)

Now Again We start A-B from C ,So now our BackStack will Look like:

A-B|C-A-B
A-B(on the same task)
C-A-B(on other task)

Now, the problem is If We will Again try to start C from B (from task C-A-B), nothing happens and C will not get launch (I din’t know why?)
Here’s a gif showing the problem…


At August 30, 2018, 9:31pm, mmurphy replied:

Without code, it is difficult to comment on what your code does.

I know setting taskAffinity will force to create a new task

No, it just sets the task affinity. Whether a task is created depends on whether that task already exists or not at the time you start the activity.

Now, the problem is If We will Again try to start C from B (from task C-A-B), nothing happens and C will not get launch (I din’t know why?)

Again, without code, it is difficult to comment.

Tasks are one of the most arcane areas of Android UI development, so I’m not surprised that you are encountering problems. Personally, outside of very specific scenarios, I try to avoid task management entirely.

I am sorry that I cannot provide much help as it stands. If you want help with what your code is doing, I would need to be able to see that code.


At August 31, 2018, 4:03am, hackzcorporation replied:

@mmurphy

Tasks are one of the most arcane areas of Android UI development, so I’m not surprised that you are encountering problems. Personally, outside of very specific scenarios, I try to avoid task management entirely.

I agree with you, it is one of the most confusing thing i have ever encountered with.

For past 4 days i’m just bashing my head into the walls, every time it looks like now i understand how tasks are working one more problem arises and i remain stuck there.Please look at the source code and try to help me with task management.
https://we.tl/t-gG0qiZMn79


At August 31, 2018, 11:55am, mmurphy replied:

Your code seems focused on the second scenario from your original question. I am not completely certain what your overall business rules are for what should be going on with your activities outside of these experiments. So, here are two patterns that work:

                Intent intent= new Intent(SecondActivity.this,ThirdActivity.class);

                if (launchedAlready) {
                    // use intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); if you want to reuse the existing C instance
                }
                else {
                    launchedAlready = true;
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }

                startActivity(intent);

For finer-grained control over the sequence of events, have only one activity, and use fragments to represent the different screens. This is Google’s long-term direction with Jetpack, as seen with things like the Navigation component.


At August 31, 2018, 3:28pm, hackzcorporation replied:

This seems a much better way than multiple activities…