LocalBroadcastManager, android:process=:ProcessName, слишком много оперативной памяти

Хорошо, поэтому я попытаюсь объяснить одну проблему за раз, чтобы вы могли понять проблемы, с которыми я сталкиваюсь, и, надеюсь, кто-то сможет подсказать мне, как это исправить. Таким образом, мое приложение работает отлично, но мои пользователи жалуются на высокое использование оперативной памяти, и в среднем оно работает где-то от 120 МБ до 200 МБ IDLE, что, я согласен, неправильно, поэтому я пошел дальше и вспомнил трюк, который я использовал в предыдущем проекте, и что была эта строка кода android:hardwareAccelerated="false". Это удаляет около 10 МБ оперативной памяти на каждое действие, но я все еще сижу при использовании около 90 МБ, поэтому я пошел и посмотрел немного усерднее и нашел этот android:process=":ProcessName">, который переводит мое приложение со 100 МБ всего на 8 МБ. барана. Но при этом я столкнулся с проблемой, и это тот факт, что у меня есть LocalBroadcastManager в сервисной активности, которая отправляет данные в мою MainActivity, и когда у этих двух есть разные процессы, они не взаимодействуют друг с другом, и если я комбинирую их в один и тот же процесс, использование резко возрастает. Так что я как бы застрял, что делать в этот момент, и я отказываюсь использовать отладчик памяти Android, потому что он не говорит мне дерьмо о том, что мой код делает неправильно. Буквально у меня есть 5 текстовых представлений и изображение внутри моей MainActivity, поэтому я знаю, что это не так уж и интенсивно! Если кому-то нужен код, пожалуйста, дайте мне знать, но я подумал, что кому-то действительно не нужно смотреть на код, чтобы ответить на этот вопрос!


person Skyler Martin    schedule 03.10.2015    source источник


Ответы (1)


Вы написали:

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

Вы можете сохранить свой Сервис в отдельном процессе и привязать его к первому процессу вашего приложения через IPC, межпроцессное взаимодействие.

Видеть:

http://developer.android.com/guide/components/bound-services.html

Есть разные способы сделать IPC. Вариант Messenger может стать для вас хорошей отправной точкой:

http://developer.android.com/guide/components/bound-services.html#Messenger

Из документации:

Если вам нужно, чтобы ваша служба взаимодействовала с удаленными процессами, вы можете использовать Messenger для предоставления интерфейса для вашей службы. Этот метод позволяет выполнять межпроцессное взаимодействие (IPC) без необходимости использования AIDL.

person onosendai    schedule 03.10.2015