Мобильное приложение Titanium падает после периода в фоновом режиме (включая службы)

Как ссылка, это на Android, и это сообщение форума Titanium

Я заметил эту проблему с несколькими приложениями, которые я сделал с Appcelerator, все они: независимо от того, простые они или сложные приложения, но чаще встречаются в больших приложениях.

Например, я работаю над приложением, которое должно уведомлять свое местоположение (местоположение GPS) каждые 5 минут. Приложение отлично работает при работе на переднем плане, однако каждый раз, когда я помещаю приложение в фоновый режим (если я минимизирую приложение с помощью кнопки "Домой"), приложение просто падает, и все службы останавливаются.

Для уведомления приложения, вот поток, который я использую:

  1. Когда я запускаю приложение, я запускаю Alarm, используя модуль AlarmManager.
  2. В этом AlarmManager добавлена ​​новая служба сигнализации, которая будет запускаться каждые 5 минут.
  3. Каждые 5 минут AlarmManager запускает службу и уведомляет сервер о текущем местоположении.

Это прекрасно работает.

Если я нажимаю кнопку "Домой", приложение иногда падает (в диспетчере приложений), но чаще при использовании других приложений на переднем плане, а приложение остается в фоновом режиме.

Я думал, что это потому, что основное действие было остановлено, поэтому я решил сохранить основное состояние действия / задачи, используя android:alwaysRetainTaskState="true"

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

У меня есть несколько вопросов:

  1. Это ожидаемое поведение?
  2. Если так, как я могу смягчить это (возможно, собственный модуль / сервис?)?
  3. Мой текущий поток - лучший поток для этого или есть лучший подход?

Любые мысли более чем приветствуются.

1 ответ

Решение

Для ответа на мой собственный вопрос: после многих тестов мы увидели, что проблема была более частой на старых устройствах.

Изучив компоненты, элементы и исследовав объем памяти, мы обнаружили, что это на самом деле связано с тем, как Android управляет приложениями и памятью.

Если ОС решит, что ваше приложение потребляет слишком много памяти в фоновом режиме, она может удалить ее в любое время. Неважно, выполняет ли он Тревогу или нет.

С устройствами с большим объемом памяти (более новые устройства) проблема просто исчезает.

Другие вопросы по тегам