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等同