I could do what you're suggesting (which I already said I didn't want to do)
much more simply from within a default constructor:

 

public class RegisteredActivity extends Activity

{

  public static List<Activity> getAllActivities() { 

    // make sure clients can't modify the contents

    return Collections.unmodifiableList(theList);

  }

  private static List<Activity> theList = new ArrayList<Activity>();

 

  public RegisteredActivity() { super(); theList.add(this); }

}

 

Since the common path here is to have Activities that don't explicitly
provide a constructor, the default constructor synthesized by the compiler
will call the parent's default constructor, thus making it trivial for
people to use this-they just create an Activity that inherits from my
RegisteredActivity instead of from Activity. But that would still require me
to create subclasses of every Activity type that other developers might want
to subclass, and it still requires developers to subclass my
RegisteredActivity, which means that it's inevitable that somebody won't do
that (by mistake), and lo, I've got an Activity out there that isn't caught
up in my List.

 

All of which I already mentioned in my first post-I don't want to do it this
way. It's error-prone. I was hoping for an API call at the Android level
that would return this list for me.

 

Ted Neward

Java, .NET, XML Services

Consulting, Teaching, Speaking, Writing

http://www.tedneward.com

 

 

From: android-developers@googlegroups.com
[mailto:android-develop...@googlegroups.com] On Behalf Of Rajiv
Sent: Thursday, June 03, 2010 4:05 AM
To: android-developers@googlegroups.com
Subject: Re: [android-developers] Re: List of all instantiated Activities

 

 

You can implement this in your application by using following way:

1) You need a class that handle all the application (Say Handller)
 In Handller class you can create a method that create List and add list
into it.
 For example 
 Class Handller{
  List list;
  //Some Housekeeping
  setActiveActivity(Activity activity){
   if(list.equals(null)){
    //create list
   }
   else{
    list.add(activity)
   }
  }
  List getActivity(){
   return list;
  }
  
 }

2) You need an Activity (say ActiveActivity) that extends Activity
 ex:
  public class ActiveActivity extends Activity {
     protected void onResume() {
         super.onResume();
  
         Handller.setActiveActivity(this);  //you need to take an instance
of Handler Class.
     }
 }
 
3) Now you can add all your activity in list by extending ActiveActivity.
 ex.
 public class ActivityA extends ActiveActivity {
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(...);
     }

4) You can get All Activities by using Handler getActivity().
 

 

 

Regards,

Rajiv

On Thu, Jun 3, 2010 at 2:39 PM, Ted Neward <ted.new...@gmail.com> wrote:

Assume I have an app that, although 95% of the time it will be used by a
single user, will occasionally be passed to a supervisor or somebody similar
who will do a logout/login/do-some-activity/logout cycle before handing it
back to the original employee using the device. On a "logout", I'd like to
kill/finish all the running activities (allowing them to do their cleanup),
then essentially "start fresh" without having to litter all the activities
with calls to specifically test to see if we've done a logout since the last
time we were brought to the front of the user's attention.

Alternatively, I could just kill the process (I'm assuming a System.exit()
works), but that would have the undesirable effect of bringing the user back
to the Home screen and forcing them to select the app, which from a UX
perspective feels awkward and amateurish.

There's also the diagnostician in me that wants to be able to find all open
Activities and finish() them if we get a low-memory signal, but that's
really a distant second to the above use case.


Ted Neward
Java, .NET, XML Services
Consulting, Teaching, Speaking, Writing
http://www.tedneward.com <http://www.tedneward.com/> 

> -----Original Message-----
> From: android-developers@googlegroups.com [mailto:android-
> develop...@googlegroups.com] On Behalf Of Romain Guy
> Sent: Wednesday, June 02, 2010 1:26 AM
> To: android-developers@googlegroups.com
> Subject: Re: [android-developers] Re: List of all instantiated
> Activities
>
> Let's step back a little bit. Ted, what is it you are trying to do?
>
> On Wed, Jun 2, 2010 at 1:24 AM, Guillaume Perrot
> <guillaume.p...@gmail.com> wrote:
> > I already made something similar (limited to the current activity)
> and
> > I did not find another way to access the activity instance.
> > To limit errors, I made my modifications in life cycle callbacks and
> > users have to inherit my Activity classes (I made a full set for
> > convenience, there are 9 Activity types) instead of the standard
> ones.
> > You could place your code in onCreate, if they inherit your class
> they
> > can't miss it.
> > Of course the developer still have to ensure it does not miss an
> > inheritance change but it's easier than adding a snippet of code
> > everywhere and more object friendly.
> >
> > On 2 juin, 08:35, "Ted Neward" <ted.new...@gmail.com> wrote:
> >> Anybody know an easy way for an app to find all the instances of all
> the
> >> Activities currently alive in the current process?
> >>
> >> Yes, I could register each one into a static List<> someplace from
> the
> >> constructor of each Activity, but that requires developers to
> remember to
> >> put that code into every Activity constructor, which is going to
> eventually
> >> miss one or two (not to mention keep the Activity alive longer than
> it
> >> should be, though that could be fixed by holding WeakReferences
> instead of
> >> strong ones, but that still misses the point), and that's going to
> mean one
> >> or two escape the list. I'd prefer to have a way to see all of them
> from
> >> Android's/Dalvik's point of view.
> >>
> >> Ted Neward
> >>
> >> Java, .NET, XML Services
> >>
> >> Consulting, Teaching, Speaking, Writing
> >>
> >>  <http://www.tedneward.com <http://www.tedneward.com/>
>http://www.tedneward.com <http://www.tedneward.com/> 
> >
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to android-
> develop...@googlegroups.com
> > To unsubscribe from this group, send email to
> > android-developers+unsubscr...@googlegroups.com
<mailto:android-developers%2bunsubscr...@googlegroups.com> 
> > For more options, visit this group at
> > http://groups.google.com/group/android-developers?hl=en
> >
>
>
>
> --
> Romain Guy
> Android framework engineer
> romain...@android.com
>
> Note: please don't send private questions to me, as I don't have time
> to provide private support.  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-
> develop...@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com
<mailto: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
<mailto: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

-- 
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