Hello,

Simply saying, I am trying to understand the behavior of singleinstance in
detail. I found 2 different behaviors when a activity with singleinstance
launchmode, launches an another activity.

Based on your reply, I understood SINGLEINSTANCE activity is launching an
activity in new task and because destination activity is already on top of
desired task, task is brought to foreground and new instance is not created.
I accept, it is special and should be used carefully.

But, it is contradicting to results stated in my previous message. Kindly
give suggestions for the questions in my previous message for better
understanding.

Thanks,
Vibhor

On Tue, Jun 22, 2010 at 2:07 PM, Dianne Hackborn <hack...@android.com>wrote:

> Yes that is working as intended, you have B and C together in their own
> task, and A can't be in it because it is single instance.
>
> Again, just ignore single instance unless you have a clear reason for using
> it, and then you will want to structure the rest of your interaction to work
> well with it.
>
> At this point I would suggest focusing questions on what you are actually
> trying to accomplish.
>
>
> On Tue, Jun 22, 2010 at 1:31 AM, Vibhor Mahajan 
> <mahajan.vib...@gmail.com>wrote:
>
>> Hello,
>>
>> Thanks Dianne for reply. I understood your point. But after doing some
>> more tests I have confusions. Kindly provide some suggestions.
>>
>> Activity A has SINGLEINSTANCE and B & C has STANDARD launch mode.
>> Execute below steps:
>> 1. Start A from launcher
>> 2. Launch B from A. (oncreate of B is called)
>> 3. Launch A from B. (re-starts A because A has SINGLEINSTANCE launchmode)
>> 4. Launch C from A. (oncreate of C is called)
>> 5. Launch A from C. (re-starts A because A has SINGLEINSTANCE launchmode)
>> 6. Launch B from A again.
>>
>> From step 6 above, instance of B is NOT CREATED instead task containing
>> activity B & C comes in foreground, with last state of C (from step4)
>> displayed. (because C was on top of this task).
>>
>> Similar behavior is documented in
>> http://developer.android.com/guide/topics/fundamentals.html link. "If it
>> does, it is not in position to handle the intent, and the intent is dropped.
>> (Even though the intent is dropped, its arrival would have caused the task
>> to come to the foreground, where it would remain.)"
>>
>> Q1) Why new instance of B is not created even though B has standard launch
>> mode and also not top of destination task?
>>
>> Now if I change the implementation as below:
>> Activity A has STANDARD and B has SINGLEINSTANCE launch mode.
>> Repeat same steps again:
>> 1. Start A from launcher
>> 2. Launch B from A. (oncreate of B is called)
>> 3. Launch A from B. (a new instance of A is created, in the same task in
>> which A's instance was created in step 1. Now stack is A - A)
>> 4. Launch B from A re-starts B.
>> 5. Launch A from B. (a new instance of A is created, in the same task in
>> which A's instance was created in step 1. Now stack is A - A - A)
>>
>> Executing step 4 & 5 repeatedly, creates multiple instances of A.
>>
>> Q2) Step 3 & 5, B creates an intent to start A with
>> FLAG_ACTIVITY_NEW_TASK. Why new instance of A is created in same task in
>> which A was launched from launcher?
>> Q3) Shouldn't the behavior be same as explained in previous message i.e. A
>> should be brought to foreground?
>>
>> Thanks,
>> Vibhor
>>
>> On Tue, Jun 22, 2010 at 10:41 AM, Dianne Hackborn <hack...@android.com>wrote:
>>
>>> First, you almost certainly don't want to use singleInstance.  It is for
>>> very special situations, and has significant repercussions on UI flow that
>>> you need to understand before touching it.
>>>
>>> The key point about this is this statement in "Launch modes"
>>> http://developer.android.com/guide/topics/fundamentals.html#lmodes
>>>
>>> <http://developer.android.com/guide/topics/fundamentals.html#lmodes>*Whether
>>> the instance can have other activities in its task*. A "singleInstance"
>>> activity stands alone as the only activity in its task. If it starts another
>>> activity, that activity will be launched into a different task regardless of
>>> its launch mode — as if FLAG_ACTIVITY_NEW_TASK was in the intent. In all
>>> other respects, the "singleInstance" mode is identical to "singleTask".
>>>
>>> This means that when you launch B, it is the root of its own new task.
>>>  When you launch B again, the task for it already exists, then the current
>>> task will be brought to the foreground instead of starting a new instance.
>>>  You have effectively turned yourself into a launcher, so get the behavior
>>> expected for a launcher.
>>>
>>> On Mon, Jun 21, 2010 at 9:45 PM, Vibhor Mahajan <
>>> mahajan.vib...@gmail.com> wrote:
>>>
>>>> Hello,
>>>>
>>>> As per the documentation, standard and singletop differ in just one way,
>>>> standard activity instance is created every time but singletop instance may
>>>> or may not be created. I verified this, if in the above code, reverse
>>>> launchmode of activity A & B i.e. Now A has STANDARD and B as
>>>> SINGLEINSTANCE.
>>>>
>>>> Repeat same steps again:
>>>> 1. Click button in Activity A starts B. (oncreate of B is called)
>>>> 2. Click button in Activity B creates a new instance A. (oncreate of A
>>>> is called, because A now has STANDARD launchmode)
>>>> 3. Click button in Activity A re-starts B. (oncreate of B is NOT CALLED,
>>>> because B now has SINGLEINSTANCE launchmode)
>>>>
>>>> This is exactly as per the documentation.
>>>>
>>>> Kindly help in understanding why in original source code, multiple
>>>> instances of B is not created, though B is having STANDARD launch mode?
>>>>
>>>> Thanks,
>>>> Vibhor
>>>>
>>>>
>>>> On Mon, Jun 21, 2010 at 8:15 PM, MobDev <developm...@mobilaria.com>wrote:
>>>>
>>>>> Btw, got this from documentation, concentrate on the last sentence :
>>>>> "Every time there's new intent for a "standard" activity, a new
>>>>> instance of the class is created to respond to that intent. Each
>>>>> instance handles a single intent. Similarly, a new instance of a
>>>>> "singleTop" activity may also be created to handle a new intent.
>>>>> However, if the target task already has an existing instance of the
>>>>> activity at the top of its stack, that instance will receive the new
>>>>> intent (in an onNewIntent()  call); a new instance is not created."
>>>>> found here :
>>>>>
>>>>> http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
>>>>>
>>>>> On 21 jun, 13:30, Vibhor Mahajan <mahajan.vib...@gmail.com> wrote:
>>>>> > Hello,
>>>>> >
>>>>> > What is launch mode of an activity, which is launched from an
>>>>> activity
>>>>> > with launch mode as "singleinstance". I tried the following code.
>>>>> >
>>>>> > My application has two activities i.e. A & B. Activity A has
>>>>> > "singleinstance" launchmode set and activity B has "standard" launch
>>>>> > mode set. Android manifest file is as follows:
>>>>> >
>>>>> > <application android:icon="@drawable/icon" android:label="@string/
>>>>> > app_name" >
>>>>> >         <activity android:name=".activity_lifecycle"
>>>>> >                   android:label="@string/app_name"
>>>>> >                   android:launchMode="singleInstance">
>>>>> >             <intent-filter> <action
>>>>> > android:name="android.intent.action.MAIN" />
>>>>> >                 <category
>>>>> > android:name="android.intent.category.LAUNCHER" />
>>>>> >             </intent-filter>
>>>>> >         </activity>
>>>>> >         <activity android:name=".another"
>>>>> > android:launchMode="standard" ></activity>
>>>>> >     </application>
>>>>> >
>>>>> > Activity A has a button, clicking button starts Activity B using
>>>>> below
>>>>> > code:
>>>>> > public void onClick(View v) {
>>>>> >         // TODO Auto-generated method stub
>>>>> >         Intent intent = new
>>>>> > Intent(activity_lifecycle.this,another.class);
>>>>> >         startActivityForResult(intent, 0);
>>>>> >
>>>>> > }
>>>>> >
>>>>> > Activity B has a button, clicking button starts Activity A using
>>>>> below
>>>>> > code:
>>>>> > public void onClick(View v) {
>>>>> >         // TODO Auto-generated method stub
>>>>> >         Intent intent = new
>>>>> > Intent(another.this,activity_lifecycle.class);
>>>>> >         startActivityForResult(intent, 0);
>>>>> >
>>>>> > }
>>>>> >
>>>>> > Click button in Activity A starts B. (oncreate of B is called)
>>>>> > Click button in Activity B re-starts A. (because A has SINGLEINSTANCE
>>>>> > launchmode)
>>>>> > Click button in Activity A re-starts B. (oncreate of B is NOT CALLED)
>>>>> >
>>>>> > After 3rd step, since activity B is standard, a new instance should
>>>>> be
>>>>> > created and not previous instance to be used.
>>>>> >
>>>>> > Kindly suggest why when second time activity B is started, a new
>>>>> > instance of activity B is not created, when it is declared with
>>>>> > launchmode "standard".
>>>>> >
>>>>> > Regards,
>>>>> > Vibhor
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Android Developers" group.
>>>>> To post to this group, send email to
>>>>> android-developers@googlegroups.com
>>>>> To unsubscribe from this group, send email to
>>>>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/android-developers?hl=en
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Android Developers" group.
>>>> To post to this group, send email to
>>>> android-developers@googlegroups.com
>>>> To unsubscribe from this group, send email to
>>>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/android-developers?hl=en
>>>>
>>>
>>>
>>>
>>> --
>>> Dianne Hackborn
>>> Android framework engineer
>>> hack...@android.com
>>>
>>> Note: please don't send private questions to me, as I don't have time to
>>> provide private support, and so won't reply to such e-mails.  All such
>>> questions should be posted on public forums, where I and others can see and
>>> answer them.
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Android Developers" group.
>>> To post to this group, send email to android-developers@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Android Developers" group.
>> To post to this group, send email to android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>>
>
>
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  All such
> questions should be posted on public forums, where I and others can see and
> answer them.
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to