Связующее, предотвращающее сбор мусораAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Связующее, предотвращающее сбор мусора

Сообщение Anonymous »

Я думаю, что обнаружил утечку памяти и хочу подтвердить то, что, по моему мнению, может быть правдой о том, как реализован Binder в Android. В данном случае у меня есть Служба и Действие, каждое из которых находится в своем процессе. Я создал AIDL, который позволяет мне передавать объект обратного вызова из действия в службу через метод ipc, а затем вызывать обратный вызов, когда служба завершает запрошенную задачу.

Долгое время мне было интересно: если я передаю новый объект обратного вызова в службу и не сохраняю указатель на объект обратного вызова в своей деятельности почему сборщик мусора просто не продолжает работу и не выполняет получить обратный вызов в процессе моей активности? Поскольку этого не происходит, откуда JVM узнает, когда собирать обратный вызов в моей деятельности?

Я думаю, ответ заключается в том, что система Binder хранит указатель на мой обратный вызов в процессе действия до тех пор, пока соответствующий объект обратного вызова в процессе службы не вызовет метод Finalize(), который затем отправит сообщение в действие, чтобы освободить указатель. Это правильно? Если нет, то как это работает?

Я считаю, что да, и это приводит к интересной ситуации, когда обратный вызов в действии указывает на что-то очень интенсивное использование памяти. он не будет собран до тех пор, пока не будет собран обратный вызов в Сервисе. Если Службе не хватает памяти, она может не получать обратный вызов в течение длительного времени, а обратные вызовы могут просто накапливаться в действии, пока в действии не возникнет ошибка OutOfMemoryError.

Подробнее здесь: https://stackoverflow.com/questions/797 ... collection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»