设置JobIntentService

时间:2019-10-08 11:18:19

标签: java android google-cloud-firestore jobintentservice

我的应用程序使用了Firestore中我想在后台更新的数据库。我试图为此目的使用JobIntentService, 我在JobIntentService的onHandleIntent()中的方法update()。 这是代码:


import androidx.core.app.JobIntentService;

import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.os.AsyncTask;
import android.os.Process;
import android.os.SystemClock;
//import android.support.annotation.NonNull;
//import android.support.v4.app.JobIntentService;
import android.util.Log;


import java.io.InputStream;
import java.util.List;

import static android.os.Build.VERSION_CODES.P;

public class TestJobIntentService extends JobIntentService {
    private static final String TAG = "ExampleJobIntentService";


    static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, TestJobIntentService.class, 123, work);
    } 

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onHandleWork(Intent intent) {

        Log.d(TAG, "onHandleWork");    
        update();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    public boolean onStopCurrentWork() {
        Log.d(TAG, "onStopCurrentWork");
        return super.onStopCurrentWork();
    }

    public void update(){
      // my code here
    }


}

这确实有效,但不幸的是,这使应用程序运行缓慢得令人无法接受。例如, 现在,从Firestore检索某些数据将花费近30秒,而更新未运行时则只需一秒钟。

因此,我想知道是否有一种方法可以将JobIntentService的优先级设置得更低一些,我发现了类似IntentService的问题的答案How to set Priority of IntentService in Android。 因此,似乎插入了代码行

Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); 

在适当的位置可能会起作用。 JobIntentService中的CommandProcessor类,

final class CommandProcessor extends AsyncTask<Void, Void, Void> {
            @Override
            protected Void doInBackground(Void... params) {
                GenericWorkItem work;

                if (DEBUG) Log.d(TAG, "Starting to dequeue work...");

                while ((work = dequeueWork()) != null) {
                    if (DEBUG) Log.d(TAG, "Processing next work: " + work);
                    onHandleWork(work.getIntent());
                    if (DEBUG) Log.d(TAG, "Completing work: " + work);
                    work.complete();
                }

                if (DEBUG) Log.d(TAG, "Done processing work!");

                return null;
            }
     }

,似乎很适合这样做,所以我认为我可以 在我的类TestIntentService中覆盖它,并在此处插入上面的代码行。 (在这一点上,我必须承认,我完全不确定多余的行会 真正指的是线程AsyncTask延迟其工作。但我决定尝试一下。)  但是,JobIntentService的全局变量DEBUG受保护,因此这种方法似乎不起作用。

有人知道是否可以访问和设置JobIntentService的优先级吗?

0 个答案:

没有答案