您的位置:首页 > 移动开发 > Android开发

Re:Android Dialog中Handler的使用

2018-01-09 18:14 218 查看
public class Dialog implements DialogInterface{

private Message mDismissMessage;//窗口消失时候的Message实例

private static final int DISMISS = 0x43;//咱们只看dissmiss这个状态,cancel和show是同理

private final Handler mListenersHandler;//一个Handler实例

Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
mListenersHandler = new ListenersHandler(this);//ListenersHandler内部类,继承了Handler
}

private void sendDismissMessage() {
if (mDismissMessage != null) {
Message.obtain(mDismissMessage).sendToTarget();//Message.obtain(message)想当于copy一个新的message, 每一个Message中有一个Handler索引,sendToTarget方法内部调用Handler.sendMessage(this)发送信息。
}
}

public void setOnDismissListener(@Nullable DialogInterface.OnDismissListener listener) {
if (listener != null) {
mDismissMessage = mListenersHandler.obtainMessage(DISMISS, listener);//handler的obtainMessage(what,Object)方法返回一个what等于DISMISS,Object等于listenter,Target等于handler的Message
} else {
mDismissMessage = null;
}
}

private static final class ListenersHandler extends Handler {
private final WeakReference<DialogInterface> mDialog;

public ListenersHandler(Dialog dialog) {
mDialog = new WeakReference<DialogInterface>(dialog);//弱引用
}

@Override
public void handleMessage(Message msg) {
switch (msg.what) {//联系上了,msg.what肯定是DISMISS
case DISMISS:
((DialogInterface.OnDismissListener) msg.obj).onDismiss(mDialog.get());//msg的obj就是Listener呗,调用其中的onDismiss方法。
break;
}
}
}
}

忘记了handler使用的时候,就看看大神的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Handler