1

我的问题不重复这个问题!我的案例是关于 AsyncTask 而不仅仅是关于 Runnable,即便如此,我在 runnable 中有 2 个 AsyncTask 需要处理!

我是 Android 新手,我有一个由React Native创建的应用程序。但问题是我想sqlite通过rest-API将存储在服务器中的任何数据(图像[jpg]和视频[mp4])上传并在android(Native Module)中处理任务

工作流程:

  • 我的服务需要继续在后台运行以检查存储的任何数据sqlite
    1. 该服务将在发送前压缩 mp4 扩展的大小(使用FFMPeg
    2. 该服务将删除真实视频
    3. 该服务会将数据发送到服务器(我添加了 1 列调用flag以检查视频是否已压缩)

问题 :

我已经在服务中创建compressTask和运行,sending但是使用它意味着如果已经执行,函数将在尚未完成时执行,compressTasksendingextends AsyncTaskcompressTasksendingcompressTask

示例:我在 sqlite 中有 2 行视频,服务将执行compressTask并且已经压缩了 1 个视频,但sending将在第 2 个视频已经压缩之前执行

预期结果:我想处理发送等待已压缩的 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;
    }
}
4

0 回答 0