public void dispose() {
    CatLog.d(this, "Disposing CatService object for slot: " + mSlotId);

    // Clean up stk icon if dispose is called
    broadcastCardStateAndIccRefreshResp(CardState.CARDSTATE_ABSENT, null);

    mCmdIf.unSetOnCatSessionEnd(this);
    mCmdIf.unSetOnCatProactiveCmd(this);
    mCmdIf.unSetOnCatEvent(this);
    mCmdIf.unSetOnCatCallSetUp(this);
    mCmdIf.unSetOnCatCcAlphaNotify(this);
    mCmdIf.unSetOnCatSendSmsResult(this);

    mCmdIf.unregisterForIccRefresh(this);
    if (mUiccController != null) {
      mUiccController.unregisterForIccChanged(this);
      mUiccController = null;
    }
    if (mMsgDecoder != null) {
      mMsgDecoder.dispose(mSlotId);
      mMsgDecoder = null;
    }
    mHandlerThread.quit();
    mHandlerThread = null;
    removeCallbacksAndMessages(null);
  }
  public void dispose() {
    mIccRecords.unregisterForRecordsLoaded(this);
    mCmdIf.unSetOnCatSessionEnd(this);
    mCmdIf.unSetOnCatProactiveCmd(this);
    mCmdIf.unSetOnCatEvent(this);
    mCmdIf.unSetOnCatCallSetUp(this);

    this.removeCallbacksAndMessages(null);
  }