我在毕加索遇到问题,出现当机:
Fatal Exception: java.util.concurrent.RejectedExecutionException: Task com.squareup.picasso.PicassoExecutorService$PicassoFutureTask@41a39a38 rejected from com.squareup.picasso.PicassoExecutorService@41acc1d0[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1967)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:782)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1303)
at com.squareup.picasso.PicassoExecutorService.submit(PicassoExecutorService.java:88)
at com.squareup.picasso.Dispatcher.performSubmit(Dispatcher.java:202)
at com.squareup.picasso.Dispatcher.performSubmit(Dispatcher.java:175)
at com.squareup.picasso.Dispatcher$DispatcherHandler.handleMessage(Dispatcher.java:482)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.os.HandlerThread.run(HandlerThread.java:60)
这是我在onResume()中创建毕加索的方法:
final Picasso.Builder builder = new Picasso.Builder(context);
builder.indicatorsEnabled(BuildConfig.DEBUG);
builder.defaultBitmapConfig(Bitmap.Config.RGB_565);
final long cacheSize = (long) (getAvailableRam() * 0.5F);
builder.memoryCache(new LruCache((int) cacheSize));
builder.listener(_listener);
_picasso = builder.build();
并在onPause()中:
if (_picasso != null) {
_picasso.shutdown();
_picasso = null;
}
有什么建议么?
最佳答案
可能是关机问题。我建议之前取消所有任务,然后关闭毕加索:)
checkout 此:https://github.com/square/picasso/issues/329
简单快速的解决方案。
对毕加索使用单个实例
/** Stops this instance from accepting further requests. */
public void shutdown() {
if (this == singleton) {
throw new UnsupportedOperationException("Default singleton instance cannot be shutdown.");
}
if (shutdown) {
return;
}
cache.clear();
cleanupThread.shutdown();
stats.shutdown();
dispatcher.shutdown();
for (DeferredRequestCreator deferredRequestCreator : targetToDeferredRequestCreator.values()) {
deferredRequestCreator.cancel();
}
targetToDeferredRequestCreator.clear();
shutdown = true;
}
检查:
public void cancelTag(Object tag) {
checkMain();
if (tag == null) {
throw new IllegalArgumentException("Cannot cancel requests with null tag.");
}
List<Action> actions = new ArrayList<Action>(targetToAction.values());
//noinspection ForLoopReplaceableByForEach
for (int i = 0, n = actions.size(); i < n; i++) {
Action action = actions.get(i);
if (tag.equals(action.getTag())) {
cancelExistingRequest(action.getTarget());
}
}
List<DeferredRequestCreator> deferredRequestCreators =
new ArrayList<DeferredRequestCreator>(targetToDeferredRequestCreator.values());
//noinspection ForLoopReplaceableByForEach
for (int i = 0, n = deferredRequestCreators.size(); i < n; i++) {
DeferredRequestCreator deferredRequestCreator = deferredRequestCreators.get(i);
if (tag.equals(deferredRequestCreator.getTag())) {
deferredRequestCreator.cancel();
}
}
}