Как обрабатывать асинхронные в Сервис для выполнения синхронных задач в Android?
Мой вопрос не дублируется как этот вопрос! В моем случае речь идет об AsyncTask, а не только о Runnable, и даже в этом случае у меня есть 2 AsyncTask внутри runnable, которые необходимы для обработки!
Я новичок в Android, у меня есть приложение, созданное React Native. но проблема в том, что я хочу загрузить любые данные (изображение [jpg] и видео [mp4]), которые хранятся в sqlite
на сервер через rest-API и обработку задачи в android ( Native Module)
Рабочий процесс:
- Мой сервис должен работать в фоновом режиме, чтобы проверить любые данные, хранящиеся на
sqlite
- служба сжимает размер расширения mp4 перед отправкой (используя FFMPeg)
- сервис удалит настоящее видео
- служба отправит данные на сервер (я добавляю 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;
}
}