Я написал плагин Cordova, который выполняет повторное масштабирование изображений на Android, но пользовательский интерфейс блокируется при просмотре большого количества изображений (более 100), пока останавливается. Я выполняю все изменения размера на theadPool, изначально с просто исполняемым, но после прочтения этого сообщения в блоге по Cordova Plugins and Thread Blocking я переключился на внешний класс, чтобы выполнить эту работу. Однако я все еще получаю:Android Cordova Plugin блокирует нить пользовательского интерфейса, хотя используется пул потоков
W/PluginManager﹕ THREAD WARNING: exec() call to ImageStore.getImage blocked the main thread for 91ms. Plugin should use CordovaInterface.getThreadPool().
Для каждого изображения с измененным размером, вызов выглядит следующим образом:.
private boolean getImage(final JSONArray args, final CallbackContext callbackContext) throws JSONException {
JSONObject argObject = args.getJSONObject(0);
int photoId = argObject.getInt("photoId");
final PhotoData photoData = mPhotos.get(photoId);
cordova.getThreadPool().execute(new GetImageRunnable(photoData, callbackContext));
return true;
}
Где GetImageRunnable не имеет никаких связей с основной плагин, за исключением объекта photoData, который передается в Is есть ли способ увидеть, что вызывает замедление или блокирование основного потока?
Я бы попытался использовать AsyncTask и игнорировать, казалось бы, неподходящую функциональность CordovaInterface. (У других, похоже, тоже есть эта проблема). – vbence
@vbence добавьте это как ответ, и, если возможно, представите какой-то пример, и я помечаю его как принятый ... –