Непрерывная запись информации в фоновом режиме - PullRequest
1 голос
/ 25 мая 2020

Для моего приложения мне нужно создать обратную связь для положения 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 - плохая идея, потому что он вызывается, когда активность больше не отображается

1 Ответ

0 голосов
/ 25 мая 2020

Для этого лучше использовать жизненный цикл активности, потому что вам нужно, чтобы ваше сообщение отображалось.

Конечно, вы также можете использовать жизненный цикл приложения.

Чтобы иметь возможность использовать жизненный цикл действия, вызовите следующие методы в основном действии:

To информация для начала записи:

   @Override
protected void onCreate() {....}

или

@Override
protected void onStart() {....}

Чтобы завершить запись:

@Override
protected void onDestroy() { super.onDestroy(); 
.......}

или

@Override
protected void onStop() { super.onStop(); 
.......}
...