Hello,

I am still waiting and hoping for some suggestions on single instance.

As per my experiments results, either I have not understood Google
documentation properly or its behavior is different from Google
documentation.

Kindly suggest.

Thanks,
Vibhor

On Tue, Jun 22, 2010 at 3:00 PM, Vibhor Mahajan <[email protected]>wrote:

> 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 <[email protected]>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 <[email protected]
>> > 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 <[email protected]
>>> > 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 <
>>>> [email protected]> 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 <[email protected]>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 <[email protected]> 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
>>>>>> [email protected]
>>>>>> To unsubscribe from this group, send email to
>>>>>> [email protected]<android-developers%[email protected]>
>>>>>> 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
>>>>> [email protected]
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected]<android-developers%[email protected]>
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/android-developers?hl=en
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Dianne Hackborn
>>>> Android framework engineer
>>>> [email protected]
>>>>
>>>> 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
>>>> [email protected]
>>>> To unsubscribe from this group, send email to
>>>> [email protected]<android-developers%[email protected]>
>>>> 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 [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]<android-developers%[email protected]>
>>> For more options, visit this group at
>>> http://groups.google.com/group/android-developers?hl=en
>>>
>>
>>
>>
>> --
>> Dianne Hackborn
>> Android framework engineer
>> [email protected]
>>
>> 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 [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]<android-developers%[email protected]>
>> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to