我的应用程序使用了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的优先级吗?