Как обрабатывать асинхронные в Сервис для выполнения синхронных задач в Android?

Мой вопрос не дублируется как этот вопрос! В моем случае речь идет об AsyncTask, а не только о Runnable, и даже в этом случае у меня есть 2 AsyncTask внутри runnable, которые необходимы для обработки!

Я новичок в Android, у меня есть приложение, созданное React Native. но проблема в том, что я хочу загрузить любые данные (изображение [jpg] и видео [mp4]), которые хранятся в sqlite на сервер через rest-API и обработку задачи в android ( Native Module)

Рабочий процесс:

  • Мой сервис должен работать в фоновом режиме, чтобы проверить любые данные, хранящиеся на sqlite
    1. служба сжимает размер расширения mp4 перед отправкой (используя FFMPeg)
    2. сервис удалит настоящее видео
    3. служба отправит данные на сервер (я добавляю 1 столбец с именем flag проверить, сжато ли уже видео)

Проблема:

Я создал compressTask а также sending функция внутри службы, но compressTask а также sending с помощью extends AsyncTask это означает, что если compressTask уже выполнить, sending функция тоже будет выполняться когда compressTask еще не закончен,

Пример: у меня есть 2 строки видео в sqlite, служба будет выполняться compressTask и уже 1 видео сжато, но sending будет выполнено до того, как второе видео уже будет сжато

Ожидаемый результат. Я хочу обработать отправку в ожидание 2 уже сжатых видео. Как я могу это сделать?

Мой код:

public class myService extends Service {
    public Runnable mRunnable = null;
    private boolean mRunning = false;
    Handler mHandler = new Handler();
    IBinder mBinder = new LocalBinder();
    String newPathOutputVideo = null;
    int idProcessVideo = 0;
    String log = null;
    @Inject
    FFmpeg ffmpeg;

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    public class LocalBinder extends Binder {
        public myService getServerInstance() {
            return myService.this;
        }
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        loadFFmpeg();
        Log.d("Service"," onstart kepanggil ga?");
        mRunnable = new Runnable() {
            @Override
            public void run() {
                /* ---New Code--- */
                Log.d("Service","SERVICE RUN");
                compressTask c = new compressTask();
                c.execute();

                sending a = new sending();
                a.execute();
            mHandler.postDelayed(mRunnable, 10 * 1000);
            }
        };
        mHandler.postDelayed(mRunnable, 10 * 1000);
        return START_STICKY;
    }
}

0 ответов

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