I think you are confusing the concept of garbage collection with the component lifecycle that Android provides.
Garbage collection will only free objects sitting in memory if they are no longer reachable, that is no more strong references to them exist. If you are using finalizers to trigger behavior when an object is collected then there is you are doing something wrong.
Meanwhile, the component lifecycle is managed by the Android OS in a determinate fashion - when it wishes to kill an activity (or service, or application) then it will call some methods on that component (e.g. onDestroy()
) and that's it - once Android has destroyed it then it should be gone from your perspective to.
The only difficulty comes in when you wish to start saving and restoring activity state - then it becomes important to you to manage a few things when your activity is being paused/stopped/destroyed. Again, these are fully determinate events and unrelated to garbage collection.
To answer your questions specifically:
i) it doesn't matter how fields are declared. If you have a reference to an object then you automatically have a reference to all of its fields, meaning they won't be garbage collected.
ii) when you create the intent, do you keep a reference to it? If not, then it may be garbage collected, but this should not bother you because you don't have a reference to it anyway :)
iii) saved instance state will be kept by the Android system and given back to you when the activity is recreated. You should not keep your own reference to it.
Hope that helps!