Since it looks like your spikes are followed by an immediate GC, your allocation spike is likely happening in one place. If you enable GC logging (see
here for an example of how) and add some debug logging to various bits of your program, that can help in tracking down the culprit by matching up the debug log timestamps with the GC log.
Since it's very short-lived garbage, another alternative is to just live with it, since collecting it should be plenty fast. That's a less palatable option on Android though.