我有一个地图应用程序,每当用户移动地图时,我都必须向后端发出一个新请求以接收点。优先考虑Android中的任务
现在我已经优化了很多获得积分的过程。但我想为我的主题添加优先级功能。
它以串行方式执行线程(一个在另一个之前)。但是当我之前已经处理了一个更大的绑定线程时,我的优化效果会更好。
这里是我如何实现我的AsyncTask
现在:
plotPinsThread = new AsyncTask<Void, Boolean, List<Loja>>() {
final boolean oldMy = showMyStores;
final boolean oldOthers = showOtherStores;
@Override
protected List<Loja> doInBackground(Void... params) {
try {
publishProgress(true);
Log.d(TAG, "=====> Inicio de requisição de pontos");
List<Loja> lojas = new ArrayList<>();
publishProgress(true);
if (showMyStores && !isCancelled()) {
publishProgress(true);
lojas.addAll(lojasDAO.getLojasList(cliente, currentBounds, LojaJsonDAO.DEALERSHIPS, this));
}
if (showOtherStores && !isCancelled()) {
publishProgress(true);
lojas.addAll(concorrentesDAO.getLojasList(others, currentBounds, LojaJsonDAO.COMPETITORS, this));
}
return lojas;
} catch (JSONException e) {
Log.e(TAG, "Erro de Json", e);
}
return new ArrayList<>();
}
@Override
protected void onProgressUpdate(Boolean... values) {
if (values[0]) {
loading.setVisibility(View.VISIBLE);
} else {
loading.setVisibility(View.GONE);
}
}
@Override
protected void onCancelled() {
Log.d(TAG, "Uma Thread foi cancelada: ");
}
@Override
protected void onPostExecute(List<Loja> list) {
publishProgress(true);
boolean isLojasLoaded = lojasCarregadas.containsAll(list);
if (!isLojasLoaded && isEnoughZoom() && oldMy == showMyStores && oldOthers == showOtherStores && !isCancelled()) {
clearMarkers();
for (Loja loja : list) {
publishProgress(true);
if (loja.getPosition() != null) {
mMap.addMarker(getMarker(loja));
}
}
lojasCarregadas.addAll(list);
Log.d(TAG, "=====> Final de requisição de pontos");
} else {
String msg = (isLojasLoaded) ? "já carregados." : "invalidos";
Log.d(TAG, "=====> Final de requisição, dados " + msg);
}
publishProgress(false);
}
}.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
我读一些有关执行者,我不得不创建一个执行者,将实现一个PriorityQueue,在那里我会制备线具有较大的洞察力边界在较小的之前执行。 (参数currentBounds)
我不知道该怎么做,或者如果我应该用另一个线程方法实现它。 PS:如果我实现了一个Executor,有什么方法可以获得AsyncTask的params吗?
我需要从Executor类实现吗?我将如何获得currentBounds var来使我的压缩的线程应该具有更大的优先级? – wviana