Определите, когда запускается Android GC - PullRequest
4 голосов
/ 19 февраля 2010

Кто-нибудь знает, есть ли способ идентифицировать (в коде, а не в LogCat), когда ГХ запущен? Возможно, намерение уволено? Я мог бы проанализировать вывод LogCat, но было бы идеально, если бы я мог определить, когда GC запустился из моего кода.

Ответы [ 2 ]

9 голосов
/ 19 февраля 2010

Вы можете сделать это со слабым трюком:

WeakReference<GcWatcher> mGcWatcher
        = new WeakReference<GcWatcher>(new GcWatcher());
long mLastGcTime;

class GcWatcher {
    @Override
    protected void finalize() throws Throwable {
        handleGc();
        mLastGcTime = SystemClock.uptimeMillis();
        mGcWatcher = new WeakReference<GcWatcher>(new GcWatcher());
    }
}

Теперь ... действительно ли это правильно для приложения, это другое дело. :) Единственное место, где я знаю, где бы мы ни делали это в Android, это код, и его единственная цель - помочь нам проявить смекалку, когда мы просим процессы явно GC, например, когда они уходят в фоновый режим.

0 голосов
/ 19 февраля 2010

Сборщик мусора не будет работать, пока все ваши потоки не будут приостановлены.Поскольку телефоны имеют довольно мало памяти, вероятно, можно с уверенностью предположить, что GC будет работать после того, как вы получите onPause () или onStop ().

Я не думаю, что у GC будет ловушка, чтобы сказать вам, что он делает.Вам, вероятно, придется выделить память, чтобы сообщить, что произошла коллекция.

Мне любопытно, если бы ваша программа имела эту информацию, что бы она с ней сделала?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...