Code is probably too complex to post here in full, but here is the basic schema: I have two Activity subclasses, each of which hosts a ListView.  Each ListView has an adapter of a custom class, which generates View instances also of a custom class.  These lists are showing data items that are generated asynchronously in another thread; as it needs to know where to send updates to, the data objects it manipulates have WeakReference<> objects that are set to hold references to the adapters displaying their contents when they are initialised.  When an object in the list of the first activity is selected, I start the second activity with an intent that instructs it to look up the item and display its contents.  I then use the 'back' button to close the second activity and return to the first. For some reason when I run this with StrictMode checking enabled, it always crashes after a few iterations of switching between the two activities, complaining that there are too many instances of one of my Activity classes.
I have arranged for a heap dump to be written just prior to the crash (see Android StrictMode and heap dumps).  These heap dumps always show that there is 1 instance of each of my two activities on the heap at the time of termination.   First of all, is this not to be expected when I have recently switched between the two, and if that is so, why is StrictMode complaining about this?  If it isn't expected, how can I arrange to avoid this?  Examining the heap dump, both objects are referenced from the main thread stack, over which I don't seem to have any useful degree of control.  Each also has a reference from android.app.ActivityThread$ActivityClientRecord, which I also do not seem to be able to control.
So, basically, any ideas how I avoid this situation? Does this actually represent an activity leak, or is StrictMode just being overly sensitive?