Dialog類中找到了dismiss和cancel方法的實現。 看dismiss的源碼:
public void cancel() { if (mCancelMessage != null) { // Obtain a new message so this dialog can be re-used Message.obtain(mCancelMessage).sendToTarget(); } dismiss(); }
在cancel方法中調用了dismiss方法。 那么:mCancelMessage是什么?
private Message mCancelMessage; // 這是源碼中的聲明
public void setOnCancelListener(final OnCancelListener listener) { if (listener != null) { mCancelMessage = mListenersHandler.obtainMessage(CANCEL, listener); } else { mCancelMessage = null; } } public void setCancelMessage(final Message msg) { mCancelMessage = msg; }
如果 創建AlertDialog的時候設置了setOnCancelListener 這個mCancelMessage變量有作用,那么cancel 比dismiss要多做一些任務,否則dismiss和cancel等同