Since we already know that Activities can be torn down and created again when the configuration of the device changes, it basically means that the onCreate() method of the Activity can be called multiples times while not changing (moving away) the Activity itself.
So, consider that there is a call like this in the onCreate() block:
Observable.interval(0, 5, TimeUnit.SECONDS)
It will be executed multiple times. If this isn't cleaned up properly, it will most likely leak the Activity along with its allocated memory and the Observable itself, which will keep running in the background and consuming resources.
More experienced readers will have noted this already, but we have exactly this kind of leak in our current codebase. It is a flow that we use to fetch and display financial stock data.
What makes it even worse is that every time we rotate the device, it creates an entire flow to fetch that data, and it stays active in the background. So, at the moment it is very easy to have several threads running that will keep fetching the remote financial stock data, saving it in the database (at the same time), and trying to update the UI of the RecyclerView, which doesn't matter anymore because the old Activity was destroyed (but not freed from memory).
So, even without the MockActivity and startActivity() call that we used to show how memory can leak, we can initiate multiple instances of the same Activity that will always be leaked.