2015-12-11 35 views
1

我有問題,畢加索,我崩潰:畢加索庫異常崩潰

Fatal Exception: java.util.concurrent.RejectedExecutionException: Task [email protected]a39a38 rejected from [email protected][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; 
    } 

有什麼建議嗎?

回答

0

可能是關機問題。我建議之前取消所有的任務,然後關機畢加索:)

結帳這樣的: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(); 
     } 
    } 
    }