[android-developers] Re: Whenever i move out from an activity, which is in a task of singleTask, activtiy is being cleared up to root of the stack
I don't know if it's monkey or not - it looks like it's just this
install (I'm sure it's the most recent SDK) - I can reproduce this odd
behavior on there. On my other machine, and my test phone, looks like
the default behavior is correct (with the same test apps and same SDK
updates). Thanks for your help.
On Dec 1, 8:38 pm, Dianne Hackborn <hack...@android.com> wrote:
> Monkey may be doing odd things. Tasks are matched by intent, so if you
> build different intents you will be launching different tasks.
>
> On Tue, Dec 1, 2009 at 5:33 PM, Mark Wyszomierski <mar...@gmail.com> wrote:
> > Ok so the sample app code above should be producing the default
> > behavior though, right? This is happening on a mac running 1.5. I did
> > a fresh install of the SDK and the test app on a windows machine here,
> > and it works as you described on that machine (always resumes instance
> > if running in background instead of creating new instances).
>
> > I'll also see multiple instances when running the monkey test app (on
> > the problematic machine). In the DDMS process list, there will be one
> > listing for the test app. I select it, hit the stop button. The list
> > then shows another instance in its place (has a diff online value
> > etc). It seems like the monkey test app has launched dozens of
> > instances of the test app.
>
> > On the windows machine, this does not happen, there is only one
> > instance of my app after the monkey test app runs. When I select it,
> > and hit stop - it's cleared from the list, and that's the only
> > instance.
>
> > I'm not sure what's going on, but if the sample app above is correct
> > and functions in the default manner you described, I'll go with that
> > and then do some further testing on some devices,
>
> > Thanks
>
> > On Dec 1, 7:37 pm, Dianne Hackborn <hack...@android.com> wrote:
> > > I don't know what you are doing. If you try one of the sample apps like
> > > ApiDemos you will see this works fine.
>
> > > On Tue, Dec 1, 2009 at 4:18 PM, Mark Wyszomierski <mar...@gmail.com>
> > wrote:
> > > > Hi Dianne,
>
> > > > The default behavior is what I'm going for - but I'm just not seeing
> > > > that - I made this small test app - it just has two activities. I
> > > > start the app from the app tray. Then have the first activity launch
> > > > the second activity. I hit the home button to put the app in the
> > > > background. When I hit the app icon from the app tray again, instead
> > > > of seeing the app resume from its paused state (the 2nd activity
> > > > should be showing?), the first activity is shown again:
>
> > > > package com.test.teststates;
>
> > > > import android.app.Activity;
> > > > import android.content.Intent;
> > > > import android.os.Bundle;
> > > > import android.view.View;
> > > > import android.view.View.OnClickListener;
> > > > import android.widget.Button;
>
> > > > public class ActivityMain extends Activity {
> > > > @Override
> > > > public void onCreate(Bundle savedInstanceState) {
> > > > super.onCreate(savedInstanceState);
> > > > setContentView(R.layout.main);
>
> > > > Button btn = (Button)findViewById
> > > > (R.id.activity_main_btnLaunchActivity);
> > > > btn.setOnClickListener(new OnClickListener() {
> > > > public void onClick(View v) {
> > > > // launch the second activity from button click.
> > > > Intent intent = new Intent();
> > > > intent.setClass(ActivityMain.this,
> > > > ActivityChild.class);
> > > > startActivity(intent);
> > > > }
> > > > });
> > > > }
> > > > }
>
> > > > package com.test.teststates;
>
> > > > import android.app.Activity;
> > > > import android.os.Bundle;
>
> > > > public class ActivityChild extends Activity {
> > > > @Override
> > > > public void onCreate(Bundle savedInstanceState) {
> > > > super.onCreate(savedInstanceState);
> > > > setContentView(R.layout.activity_child);
> > > > }
> > > > }
>
> > > > <application android:icon="@drawable/icon" android:label="@string/
> > > > app_name">
>
> > > > <activity android:name=".ActivityMain"
> > > > android:label="@string/app_name">
> > > > <intent-filter>
> > > > <action android:name="android.intent.action.MAIN" />
> > > > <category android:name="android.intent.category.LAUNCHER" /
>
> > > > </intent-filter>
> > > > </activity>
>
> > > > <activity android:name=".ActivityChild"
> > > > android:label="@string/app_name">
> > > > <intent-filter>
> > > > <action android:name="android.intent.action.VIEW" />
> > > > <category android:name="android.intent.category.DEFAULT" /
>
> > > > </intent-filter>
> > > > </activity>
>
> > > > </application>
>
> > > > <uses-sdk android:minSdkVersion="3" />
>
> > > > On Dec 1, 5:09 pm, Dianne Hackborn <hack...@android.com> wrote:
> > > > > On Tue, Dec 1, 2009 at 1:46 PM, Mark Wyszomierski <mar...@gmail.com>
> > > > wrote:
> > > > > > I guess I'm not understanding the default process creation method.
>
> > > > > Fwiw, what we are talking about has absolutely nothing to do with
> > > > processes.
> > > > > Please make sure you read this starting at "Activities and Tasks":
> > > >http://dirkbd:9092/guide/topics/fundamentals.html
>
> > > > > Note that the interaction it describes as the normal behavior for
> > tasks
> > > > is
> > > > > what you seem to be asking for.
>
> > > > > Using a new project, with two activities, A and B (both have no
> > custom
>
> > > > > > flags set in the manifest, and Activity A is set as MAIN and
> > > > > > LAUNCHER):
>
> > > > > > 1) Launch the app from the app drawer
> > > > > > 2) Have activity A start activity B.
> > > > > > 3) Hit the home button.
> > > > > > 4) Go to the app drawer again, try launching the app again.
> > > > > > 5) Looks like a brand new process instance of the app is created,
> > > > > > instead of returning to the original process instance that's
> > already
> > > > > > in the background. As a user, I'd (personally) rather just return
> > to
> > > > > > the instance already running in the background, rather than create
> > a
> > > > > > new instance.
>
> > > > > The normal behavior, if you don't do anything, is that in step 4 you
> > will
> > > > > bring the current stack of the task from step 1 brought to the
> > > > foreground,
> > > > > in its current state. This is why most of the built-in apps behave
> > this
> > > > > way. If they do something different, they are doing something
> > special.
> > > > For
> > > > > example the settings app sets a flag on its root activity to always
> > have
> > > > the
> > > > > task clear when it is launched. But that is not the normal behavior.
>
> > > > > So the question is: what are you doing that is different? All you
> > have
> > > > > mentioned so far is using singleTask, which if used in certain in
> > > > > appropriate ways can cause this kind of thing (and other strange
> > > > behavior).
> > > > > So my first suggestion is to not use this.
>
> > > > > Given that I have no other information about what you are doing, I
> > have
> > > > no
> > > > > other suggestions than to use the debugging tools I pointed out to
> > try to
> > > > > see what your app is doing.
>
> > > > > > For my application, it doesn't make sense to open multiple
> > instances
> > > > > > of the application. Like the Browser application, there should
> > really
> > > > > > only be one instance, and anytime the user hits the Browser app
> > icon,
> > > > > > they should just return to any running instance they have on the
> > > > > > system, rather than create a new one.
>
> > > > > Is your app being launched from other applications like the browser
> > is?
> > > > If
> > > > > not, you are not like the browser, so please don't model your app
> > after
> > > > it.
> > > > > The browser does a lot of special things because of things that are
> > very
> > > > > special about it. It is a really bad model. (And in fact this
> > behavior
> > > > > causes some strange interactions, and a lot of complicated code in
> > the
> > > > > browser to try to make it behave as the user expects, so in the
> > future I
> > > > > would really like to get rid of this aspect of it.)
>
> > > > > --
> > > > > 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.
>
> > > > On Dec 1, 5:09 pm, Dianne Hackborn <hack...@android.com> wrote:
> > > > > On Tue, Dec 1, 2009 at 1:46 PM, Mark Wyszomierski <mar...@gmail.com>
> > > > wrote:
> > > > > > I guess I'm not understanding the default process creation method.
>
> > > > > Fwiw, what we are talking about has absolutely nothing to do with
> > > > processes.
> > > > > Please make sure you read this starting at "Activities and Tasks":
> > > >http://dirkbd:9092/guide/topics/fundamentals.html
>
> > > > > Note that the interaction it describes as the normal behavior for
> > tasks
> > > > is
> > > > > what you seem to be asking for.
>
> > > > > Using a new project, with two activities, A and B (both have no
> > custom
>
> > > > > > flags set in the manifest, and Activity A is set as MAIN and
> > > > > > LAUNCHER):
>
> > > > > > 1) Launch the app from the app drawer
> > > > > > 2) Have activity A start activity B.
> > > > > > 3) Hit the home button.
> > > > > > 4) Go to the app drawer again, try launching the app again.
> > > > > > 5) Looks like a brand new process instance of the app is created,
> > > > > > instead of returning to the original process instance that's
> > already
> > > > > > in the background. As a user, I'd (personally) rather just return
> > to
> > > > > > the instance already running in the background, rather than create
> > a
> > > > > > new instance.
>
> > > > > The normal behavior, if you don't do anything, is that in step 4 you
> > will
> > > > > bring the current stack of the task from step 1 brought to the
> > > > foreground,
> > > > > in its current state. This is why most of the built-in apps behave
> > this
> > > > > way. If they do something different, they are doing something
>
> ...
>
> read more »
--
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+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home