![](/img/trans.png)
[英]Is there any class in Java similar to android.os.Handler in Android?
[英]android development - using android.os.Handler for inter class communication
我作为android开发新手的一个挣扎是我的课程倾向于使用gui监听器等所有内部类等相当广泛。 所以我想出了一个分解我的课程的解决方案,我想听听安卓专家的一些反馈。
把它放到一个例子中。 我不想定义特定Activity在同一个类中的所有对话框(在该活动中发生了一系列的Dialog)所以我实现了一个DialogManager类来定义和保存所有潜在的Dialog,从而移交一个处理器实例对此DialogManager的活动并使用它来通知活动发生了什么gui事件。
这是一个这个DialogManager类的片段,mHandler是回调Activity的处理程序
mDownloadDialog = new ProgressDialog(mContext);
mDownloadDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDownloadDialog.dismiss();
Message message = mHandler.obtainMessage();
message.arg1 = DOWNLOAD_DIALOG;
message.arg2 = AlertDialog.BUTTON_NEGATIVE;
message.sendToTarget();
}
});
所以这很有效,我对现在更有条理的源代码感到满意,但是我想知道Handler类是否是正确的方法,或者这是否有点矫枉过正,并且有一些更好的方法来实现相同的结果推荐的。
编辑:正如巨石所指出的那样
处理程序消息不会立即执行
所以考虑到这一点,使用Handler并不是正确的方法。
下一个想法就像在给定示例中定义接口一样简单
public interface DialogEventReceiverInterface {
public void dialogEvent(int dialog,int button);
}
在Activity中实现该接口,将活动交给DialogManager,并在发生事件时调用dialogEvent。 相当直接在我看来...
这可能不是您正在寻找的100%,但它可能会解决您在Android应用中遇到的问题。
我经常会遇到很多内部类侦听器,例如在处理大量UI事件时,另一个选择是发布 - 订阅。 您发布事件和对象的位置订阅特定事件。 在Android中,谷歌拥有一套他们使用的名为Guava
的图书馆,这些库有很多优秀的东西。 其中一个是EventBus
,它使这更容易一些。
http://code.google.com/p/guava-libraries/wiki/EventBusExplained
他们在那里有一些很好的例子并引导你完成它。 这是一个很大的改变,也是一种不同的思维方式,所以我不会在没有调查的情况下跳进去。 确保它适合您的项目。
EventBus非常酷,而且Guava
库中有很多很棒的功能。
我很欣赏你不一定要特别询问整理与Dialog
相关的混乱,而是你展示的Dialog
代码只是一个更广泛问题的例证,我认为你要求设计模式来解决。
但是,专注于您Dialog
的具体示例,Android API现在已经以Fragment
的形式提供了更清晰的解决方案,特别是DialogFragment
。 使用Fragment
类是一种更DialogFragment
的方法,因为您通常在单独的类文件中定义DialogFragment
。 Android API文档包含有关如何处理DialogFragment
和父Activity
之间通信的非常好的指南。
在我切换到使用Fragment
的所有内容之前,我最终在Activity
类中创建了大量的Dialog
,我尝试了各种设计模式和对话管理器等。但是,在我看来, Fragment
方法更加清晰。
与早期Android版本的兼容性没有问题,因为您可以使用V4支持包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.