Для моего приложения мне нужно создать обратную связь для положения GPS, использования RAM и CPU. Я также должен регистрироваться, когда приложение запускается и когда оно закрывается.
Я создал различные классы для получения этой информации, затем я попытался создать класс для их повторной сборки. Во время моих исследований, чтобы правильно создать этот класс, я столкнулся с несколькими проблемами. Я следил за различными следами ниже.
расширяет поток → Я не изменяю работу потока
AsyncTask → AsyncTask для краткости задача
расширяет IntentService → Мои повторные сборки выполняются каждые 500 мс, слишком много намерений
расширяет Сервис → Не предназначено для фоновых пятен
Что касается Runnables и HandlerThread, проблема в том, что я не могу обнаружить закрытие приложения
Сначала я обратился к сервису, но он не на 100% соответствовал моим потребностям, Теперь я использую следующий код:
public class InfoLogRunnable implements Runnable {
private static final String TAG = InfoLogRunnable.class.getSimpleName();
private static final long PAUSE_TIME = 100;
private static final long UPDATE_TIME = 500;
private AtomicBoolean running = new AtomicBoolean(true);
private AtomicBoolean pause = new AtomicBoolean(true);
public void stop() {running.set(false);}
public void pause() {pause.set(true);}
public void play() {pause.set(false);}
public void run() {
Log.d(TAG, "running..");
while (running.get()) {
while (pause.get())
doPause(PAUSE_TIME);
doStuff();
doPause(UPDATE_TIME);
}
Log.d(TAG, "stopping..");
}
private void doPause(long ms) {
try {
Thread.sleep(ms)
} catch (InteruptedException x) {
Log.d(TAG, x);
Thread.currentThread().interrupt();
}
}
private void doStuff() {
// logs
}
}
Проблема в том, что при закрытии приложения сообщение stopping
никогда не отображается, что, на мой взгляд, нормально. Тем не менее, я все равно хотел бы знать, когда приложение остановлено, а значит, когда остановлена и эта «служба».
Проще говоря, какой метод записи информации является наилучшим (из приложения или нет) постоянно в фоновом режиме с момента запуска приложения до его закрытия.
Спасибо за вашу помощь!
PS: Я разработал для android 4.4
Жизненный цикл активности isn Это решение, потому что нет гарантии, что вызывается onDestroy и / или onStop, а приложение не имеет этого метода. onPause метод из Activity - плохая идея, потому что он вызывается, когда активность больше не отображается