Recently I made a change in my Starling game which helped me reduce ANR well below the threshold. Here's how the graphs looks like (notice the change after the update):
In my game I have multiple (maybe thousands) objects, which need to change their visuals sometimes. At first I descended them from starling.display.MovieClip and when I needed a visual change I simply changed currentFrame property.
In the initial version of the game I was initializing my MovieClips with Vector of Texture of around 100 items long, and this didn't lead to many ANRs. Bu later on I added more and more Textures, and finally each of my 1000 MovieClips was initiated by a 1000-items long Vector. This led to massive memory usage increase, and, ultimately, to ANR increase. Most often: ANR Native method - com.adobe.air.customHandler.callTimeoutFunction
So I rewrote the code of my objects. As I was not using any other features of MovieClips, but only the ability to change frame occasionally, I descended them from starling.display.Image instead. And when I needed to change the frame, I called the texture setter and adjustSize() method
This helped me reduce the memory usage and, subsequently, ANR.
A tool which helped me measure the memory usage of a release build on various devices is JunkByte Console: https://www.reddit.com/r/as3/comments/lyg16d/junkbyte_console_very_useful_tool_for_tracking/
After pressing (M) button in the console a memory monitor is shown which gives valuable insight on the memory usage.