Бесконечная схема деятельности - PullRequest
0 голосов
/ 27 октября 2011

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

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

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

Спасибо

edit:

Стек очень прост,Нажмите на список (друг), перейдите на их страницу.При этом используется обычный вызов startActivity с намерением перейти на ту же страницу, на которой вы находитесь, и дополнительное намерение с идентификатором пользователя, который затем вызывает базу данных или удаленный вызов API для получения данных пользователя.

ТакжеЧтобы узнать о Dalvik vs Native, я регулярно проверяю дамп meminfo во время навигации.Я держу кучу dalvik как можно меньше, очищая ресурсы в onStop.Родная куча растет намного быстрее.У меня нет жестких ссылок на растровые изображения где-либо, но на экране довольно много отрисовок от инфляций.Приведут ли эти рисунки к тому, что Android в конце концов убьет мою активность?Насколько я могу судить, они просто приводят к OOM, при этом ни одна из моих операций не может быть предотвращена в результате превентивного уничтожения.

Если бы я мог вручную уничтожить свои действия вместо того, чтобы просто остановить их (как утверждает Android, когда не хватает памяти), исохранить уничтоженную активность в стеке с сохраненным состоянием, это было бы идеально.

еще раз отредактируйте:

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

пользователь -> пользователь -> действие a -> пользователь -> действиеb -> user

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

Ответы [ 2 ]

1 голос
/ 27 октября 2011

как насчет выполнения этого действия singleInstance, перехватить KeyEvent.KEYCODE_BACK, создать собственный стек кнопок возврата для этого действия

я сделал несколько примеров здесь:

http://esilo.pl/selvin/endlessactivity.zip

0 голосов
/ 27 октября 2011

Я не думаю, что проблема OOM, с которой вы сталкиваетесь, связана с количеством открытых действий.Android должен уничтожать любые старые действия в фоновом режиме по мере увеличения нагрузки на память.Эти действия будут просто воссозданы, когда пользователь вернется через стек задач.

Использовали ли вы такой инструмент, как MAT (инструмент анализа памяти), чтобы проверить, что вы выделили во время выполнения вашего приложения.Я подозреваю, что у вас может быть утечка памяти или что вам, возможно, придется быть умнее в распределении памяти.

...