簡體   English   中英

android開發 - 使用android.os.Handler進行類間通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM