![](/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.