3

Моя история разработки одного Android приложения. Часть 4.

Часть 1, Часть 2, Часть 3.

На очереди была функция поиска отписавшихся от сообщества участников. Звучала в моей голове она просто, реализовывалась она совсем не так просто, а вот в работе возникло много проблем

Суть её заключалась в скачивании списка id пользователей сообщества и сравнение этого списка со скаченным ранее. И тут я столкнулся с ещё одной интересной особенностью ос Android, она под каждое приложение создает изолированную виртуальную машину, которой выделяет определенный размер оперативной памяти, причем этот размер для всех приложений на одном устройстве одинаковый и задается производителем. Например, сейчас для обработки сообщества с 1 000 000 подписчиков мой алгоритм требует чуть более 100мб памяти. Казалось бы, устройству с оперативкой в 1 гигабайт эта задача по карману, но не тут то было, не смотря на то, что у устройства 1024 мб оперативной памяти каждому приложению оно выделяет только 64мб, а если приложение попробует использовать 65-ый мегабайт, то сразу же вылетит.

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

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

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

Мотивация меня покинула, да ещё и заболел, и решил отложить это неблагодарное дело.

Android Developers

90 постов2K подписчик

Правила сообщества

Друзья!


Давайте адекватно относиться к тематике сообщества. Посты, не удовлетворяющие требованиям канала, будут отклоняться. Разработка под Android - это не только описание того, что надо сделать

(освоить Java / покормить кота / установить студию), но и реальные примеры того, что Вы описываете.

1
Автор поста оценил этот комментарий

Дружище, подними heapSize.

В манифесте:

android:largeHeap="true"

В целом, такие задачи нужно выносить в отдельный Service, который будет крутиться в отдельном процессе и общаться через BroadcastReceiver.
Либо выносите трудоёмкую часть в Си :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо:)
1
Автор поста оценил этот комментарий

А как вам это удалось? 1 000 000 * long(64) = 8Mb, откуда 100?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я изучаю это язык совсем недавно, изначально знал что мой алгоритм работает крайне прожорливо. У меня используется ArrayList<Integer> для получения id пользователей, при этом после скачивания с сервера списка id нужно загрузить из файла старый список для сравнения.

При этом есть ещё особенности получения этого списка. Максимум за 1 запрос можно получить 25 000 id, соответственно для 1 000 000 id нужно выполнить 40 запросов. Но при этом количество пользователей в процессе получения списка может измениться, так что приходится запрашивать данные с нахлестом и на устройстве уже фильтровать чтобы избежать дублирования.

показать ответы
0
Автор поста оценил этот комментарий

про рекламу приложения так-то тоже забывать не стоит

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Согласен, но я думаю что мне она не сильно поможет. Целевая аудитория - администраторы пабликов, а это в лучшем случае каждый 100 человек, соответственно реклама такого приложения будет в 100 раз менее эффективна чем реклама любого другого приложения.