源代码
修改前:
private synchronized void initialize(Bitmap.Config config)
{
onSetImageStart();
if (mLoadingHandler != null) {
mLoadingHandler.removeCallbacks(mInstanceDecoderRunnable);
mLoadingHandler.removeCallbacks(mCacheBitmapRunnable);
mLoadingHandler.removeCallbacks(mBitmapGrid.mDecodeThumbRunnable);
}
mLoadingThread.quit();
if (mDecoder != null) {
mDecoder.recycle();
mDecoder = null;
}
mBitmapConfig = config == null ? Bitmap.Config.RGB_565 : config;
mLoadingThread.start();
mLoadingHandler = new Handler(mLoadingThread.getLooper());
}
修改后:
private synchronized void initialize(Bitmap.Config config)
{
onSetImageStart();
if (mLoadingHandler != null) {
mLoadingHandler.removeCallbacks(mInstanceDecoderRunnable);
mLoadingHandler.removeCallbacks(mCacheBitmapRunnable);
mLoadingHandler.removeCallbacks(mBitmapGrid.mDecodeThumbRunnable);
}
mLoadingThread.quit();
if (mDecoder != null) {
mDecoder.recycle();
mDecoder = null;
}
mBitmapConfig = config == null ? Bitmap.Config.RGB_565 : config;
mLoadingThread = new HandlerThread(THREAD_NAME + this.hashCode());
mLoadingThread.start();
mLoadingHandler = new Handler(mLoadingThread.getLooper());
}
HandleThread中quit()方法:
/**
* Quits the handler thread's looper.
* <p>
* Causes the handler thread's looper to terminate without processing any
* more messages in the message queue.
* </p><p>
* Any attempt to post messages to the queue after the looper is asked to quit will fail.
* For example, the {@link Handler#sendMessage(Message)} method will return false.
* </p><p class="note">
* Using this method may be unsafe because some messages may not be delivered
* before the looper terminates. Consider using {@link #quitSafely} instead to ensure
* that all pending work is completed in an orderly manner.
* </p>
*
* @return True if the looper looper has been asked to quit or false if the
* thread had not yet started running.
*
* @see #quitSafely
*/
public boolean quit() {
Looper looper = getLooper();
if (looper != null) {
looper.quit();
return true;
}
return false;
}
异常提示在调用mLoadingThread.getLooper()是空对象,因为在quit的时候已经将源Looper对象释放,所以已经为空,所以需要重新初始化