I've had a few AppGameKit Apps released on Google Play by now - two of them I do not any longer have access to the Google Play Console for as it was for my former job - but the only times those crashed was when due to crappy or no internet they could not pull down media from the server.
As for my one current personal project on Google Play, it have crashed according to Google Play Console a total of zero times. And that over 5000 installs and about 1600 current users (and a 4.74 rating). Of course, this app have no external dependencies - no server to call. Just one self contained little utility. Oh and also I rolled out a new version just two days ago, so it is quite current as far as AppGameKit versions go.
So AppGameKit being essentially a little programming language and framework rolled into one - it make it easy to do the right thing, but of-course, it will give more than enough rope to hang oneself. It is not spoken too much about in the documentation, if at all - as it is more into implementation details - but there are certain models and design patterns that serve as a guide to do the right thing easier. With regards to AppGameKit, perhaps peek a bit at the game-examples to get an impression of how to organize the code.
But for the outer game-loop as it were, it should go more or less like this:
1: User Input Event
2: Other events
3: Manipulate model based on events
4: Translate model to output data
5: Output
One do not go from one step to another without it being wrapped up and done for that iteration of the loop. This is the MVC pattern on a timeline as it were - one would usually also ensure it is represented in code and file structure. In AppGameKit one can not control the access from one step to another so as to isolate the internal structures in each as there is no proper namespace/module/package/class support. But, keeping ones tongue at the correct angle and being creative with structs, one can fake it to a high degree.
Without having your source code available - I can't really say what go wrong in your project - but given the report from Google Play, it would seem you are constantly listening for input events rather than doing that in a little chunk and then moving on and in the process emptying the input buffer. Or it could be some other part of the code taking so long, it backs up the input-buffer that expect to be emptied quite often. Certainly more often than twice a second.
Again - without source code, hard to say.
It could be as simple as a sync() missing at a crucial place - but it could be quite a bit more involved than that. As in restructure the entire thing.