Что означает «привязать» объект к Activity / Context в Android? - PullRequest
1 голос
/ 14 ноября 2011

Я специально спрашиваю об этом пункте в документации Android:

Если объект, который вы передаете, по какой-либо причине связан с Активность / Контекст, вы потеряете все взгляды и ресурсы активность.

Вы можете найти этот абзац на странице об изменениях Более быстрая ориентация экрана .

Я предполагаю, что они имеют в виду объекты, которые сохраняют ссылку на Activity / Context. В своей Деятельности я возвращаю HashMap в onRetainNonConfigurationInstance, поэтому я предполагаю, что все в порядке, поскольку ни один из объектов в этой HashMap не содержит ссылок на Activity / Context. Но я хочу убедиться; Я все еще изучаю, как происходят утечки в Android.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

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

Вы правы, если объекты сохраняют ссылку на действие или контекст, это не позволяет сборщику мусора собирать эти неиспользуемые действия, тем самым создавая огромные утечки.

0 голосов
/ 14 ноября 2011

Я работал над этим и с оговоркой, что я, возможно, даже не знаю так много, как вы до сих пор, я продолжаю видеть используемый тип WeakRef, но опять же я не вижу людей, проверяющих на нулевые значения, так что из того, что яможет собраться на нем, если пользователь переворачивает телефон вокруг системы, может, если он напрягается, просто выкинуть процесс ~, то, что я вижу, насколько я узнал, так это то, что, как мы уже знаем, System.gc изначально не совсем концептуален.работать на переносных устройствах, таким образом, указатели хранятся в какой-то системной таблице для перевода между исходным кодом и тем, что на самом деле происходит в аппаратном обеспечении ^, может ^ привести к тому, что указатели будут заново добавлены при повторном вводе, таким образом, когда это происходит, это не так.как тщательное кодирование и тестирование, чтобы не хранить ссылки в структуре данных, которая не "прогуливается по куче" один раз в течение некоторого времени.

Конечно, избегайте статики, если нет причины, и всего несколько дней назад яв конечном итоге написал что-то как new Object(){ public methodNamedInAnInterface(){ /* stuff goes here */ }}, но потом, после того, как я подумал об этом, это "лучшее усилие", и мы не можем программировать изМы пишем о проблемах, которые должны быть решены в магазине кода поставщика, где доступ к тому, как он работает, должен быть нормальным и ожидаемым ограничением

Я использую статику в своем собственном коде, но затем я работаю в изолированном локальном прототипировании[другими словами, я могу снова начать сбрасывать ошибочные указатели]

Я перехожу к ментальной модели программирования, где этот код выполняется на портативном устройстве, а не 10000 запрашивает второе ограничение

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