2013-12-03 2 views
1

Я разрабатываю приложение для компании, которая хочет использовать телефоны Android в качестве постоянной информации о местоположении пользователя. Я создал LocationListener и requestLocationUpdates, создавая кешированный процесс, который сохраняет данные в файл. НО, как правило, система убивает эти процессы, чтобы освободить место для других процессов, и я хочу отрицать это.Стойкие кэшированные процессы в android, howto?

На словах я хочу, чтобы эти процессы кэширования были постоянными и сопротивлялись уничтожению команд (или прекратили выполнение команд kill из системы). Уже попробовал деятельность но безрезультатно (хранится сбой приложения)

Сейчас система Somethin так:

LocationListener listener = new LocationListener(){ 
    onLocationChanged(){useData;/*congestion avoidance function*/}  

    onStatusChanged() 
    { 
    if(offline){requestLocationUpdate(/*with new time, to avoid congestion*/)} 

    } 
} 

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

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

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

Заранее спасибо

+0

Вы не можете остановить убийство. Если Android решит, что ему нужны ресурсы, которые вы занимаете, он убьет вас. Вы можете увеличить [важность] (http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle), будучи передним сервисом, попросите вас возобновить работу, если вы были убиты ('START_STICKY') и добавьте код, который регулярно пытается перезапустить службу (например,' AlarmManager'). Есть [несколько] (http://stackoverflow.com/q/17005837) [ответы] (http://stackoverflow.com/q/4708827), которые уже объясняют, как это работает. – zapl

ответ

0

Вы должны поставить LocationListener в службе переднего плана. Служба Foreground Service является единственным типом службы, который не будет остановлен системой, когда память станет низкой (она также должна иметь значок на системной панели). Подробнее о их реализации вы можете узнать в Android Documentation

+0

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

+0

@CommonsWare Verbatim из Android Docs «Служба переднего плана - это сервис, который считается тем, о чем пользователь активно осведомлен и, следовательно, не является кандидатом на то, чтобы система убивала при низком уровне памяти». Я согласен с тем, что это сравнительно маловероятно, чтобы остановить его, но так же вероятно, что системный интерфейс будет остановлен. – RocketSpock

+0

Я сейчас попробую. Вернитесь с результатами позже. –

Смежные вопросы