Планирование потоков в фоновом режиме в два разных момента - PullRequest
0 голосов
/ 21 мая 2019

В моем приложении мне нужно выполнить метод в 2 части.Цель состоит в том, чтобы получить скорость значения между моментом A и моментом B. Проблема в том, что до момента B поток игнорируется, если мое приложение находится в фоновом режиме.Действительно, Android CPU больше не фокусируется на этой теме.Независимо от того, что я пробовал, я все равно не могу запустить его так, как хотел бы, любые идеи будут приветствоваться.

Я использую для этого ExecutorService, который сохраняет мои два потока Runnable (1-я задача, 2-я задача)быть запланированным таймером.Я наверняка добавил параметр Wake Lock, а также использую сервис для выполнения этого в качестве фонового потока.

Манифест Android:

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <application
      ...
    <service
        android:name=".AnalysisService"
        android:exported="false"></service>
</application>

Analysis.java:

public static void runAnalysis(final Context context, final Analysis toRun){

    try{

        final Runnable firstTask = new Runnable() {
            @Override
            public void run() {

                launchWakeLock(context);

                startAnalysis(context, toRun);

            }
        };

        final Runnable secondTask = new Runnable() {
            @Override
            public void run() {

                if(isStillRunning(context,toRun)){

                    finishAnalysis(context, toRun);

                    getResult(context, toRun.getId());

                    showNotification(context, toRun);

                }

                stopWakeLock(context);

            }
        };

        final ExecutorService executorService = Executors.newScheduledThreadPool(2);

        Date dateStart = new Date();

        Calendar calendar = Calendar.getInstance();

        calendar.add(Calendar.SECOND, toRun.getDuration()*60);

        Date dateEnd = calendar.getTime();

        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                executorService.execute(firstTask);
            }
        }, dateStart);

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                executorService.execute(secondTask);
            }
        }, dateEnd);

    }catch(Exception ex){

        System.out.println(ex);

    }

}

Service.java:

@Override
protected void onHandleIntent(Intent intent) {
    if (intent != null) {

        final Analysis analysis = (Analysis) intent.getExtras().getSerializable(Analysis.extraIntentPath);

        if(analysis != null){

            Analysis.runAnalysis(getApplicationContext(), analysis);

        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...