Я пишу аркадную игру в режиме реального времени для Android >= 2.1. Во время игрового процесса я не выделяю память, чтобы не соблазнять GC. Beacuse, если GC вызывает, требуется процессор на 70-200 мс. Пользователь видит это как "о нет, эта игра отстает...".
Я проверил LogCat. Есть много GC_FOR_MALLOC или GC_EXPLICIT. Но... не от PID моего процесса! Моя игра не вызывает их. Они вызваны тем, что другие процессы работают в фоновом режиме. Некоторые обои, виджеты, радио, электронная почта, проверка погоды и другие услуги...
Я не понимаю этого полностью. Когда, например, обои исчезают, его onPause() называется, я полагаю. Таким образом, он должен остановить все свои потоки и, конечно же, не выделять какую-либо память (или вызвать System.gc()). Может быть, это неправильно реализовано? Я не знаю. Но есть некоторые службы Android, которые также время от времени вызывают GC... Это странно.
Это большой недостаток архитектуры Android <= 2.2? Android 2.3 вводит параллельный GC, который занимает меньше времени.
Что я могу сделать для обеспечения бесперебойной работы моей игры?