java.lang.NullPointerException: Attempt to read from field 'android.os.MessageQueue android.os.Loope

源代码

修改前:

 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对象释放,所以已经为空,所以需要重新初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值