How is easier to answer than when. Basically Garbage collector check the reference of the objects and see if it still being referenced by other objects. It check the reference path from the object to its root. If the root is not referenced by any classes, then it is eligible for garbage collection. Thus it is very important in designing the application to mentally picture where the large object is referenced and whether there is a clear path to GC from any reference point. Only when we have a clear path to GC you could be sure the GC will do their work.
Now when is a harder part as there are several algorithm for garbage collection and they all behave differently. The following Wikipedia article provide a general overview of the available algorithm. The following SO Question suggested that that Android is using Mark and Sweep algorithm. The answer of who goes first depends on which object is eligible for garbage collection given a particular algorithm.
Since we have no control over GC, to manage memory consumption in our application we should focus instead on making sure that every Activity and objects that we create (especially the larger ones) are eligible for garbage collection upon ending their life cycle (i.e making sure all of them have a clear path to GC). Setting objects to null (as you see in many articles and answers) would help towards that.