2012-06-22 60 views
1

我正在開發一個具有大約8個活動的應用程序,以及用於連接/從嵌入式藍牙芯片接收數據的類。當我開始時,一個藍牙對象在我的初始Activity中被初始化,其中有一個Handler接收來自藍牙對象的消息。在多個活動中使用處理程序

在互聯網上閒逛了一段時間之後,對我來說,最好的辦法是把我的課變成一個Application子類。但是,這樣做不需要我在MainMenu中初始化一個對象,這就消除了我使用Handler的能力。

有誰知道一種方法來消除處理程序的需要,以便每次藍牙應用程序更改它的狀態或接收數據時,當前的活動可以訪問它?

我的這種方法的主要問題是活動不知道藍牙應用程序何時將發送消息,應用程序等待並偵聽,然後在事件發生時通知活動。

OR

它是不好的做法對我的處理程序寫入到MainMenu的,有它處理消息的所有不同的活動,然後從活動通過處理器到活動?

+2

考慮使用[services](http://developer.android.com/reference/android/app/Service.html)... SDK文件夾內有一些示例。 – 2012-06-22 13:03:06

回答

4

我要去假設你想達到以下,因爲它是一個有點不清楚從你的問題你的最終目標(對不起!):

  1. 您的應用程序有一些活動,但是隻有一個活動從接收數據藍牙設備。
  2. 應用程序中的其他活動需要來自藍牙設備的數據,但不直接從藍牙設備接收數據。目前,您正在通過上述一項活動提供數據。
  3. 你想不使用處理程序來實現這一點。

如果我的上述假設是正確的,那麼你正在沿着正確的線去,但你可能不希望使用一個處理器。

你在一個Activity處理與藍牙設備的所有交互時是非常正確的。它簡化了一切,並提供了更好,更清潔的藍牙設備處理方式。但是,您需要從這一個活動獲取數據到其他所有人,並且爲達到此目的,您可能需要使用Broadcasts, BroadcastReceivers和Intents。有關概述,請參見here

但是,如果你能,你可能想看看使用LocalBroadcastManager因爲它可以使自己的應用程序的空間內的任何節目。廣播是全球性的,如果您不需要將數據傳遞到您自己的應用以外,由於安全隱患,應該避免廣播。

最後,你有沒有考慮過使用Fragments爲你的其他活動?廣播的另一個缺點是與它們相關的額外開銷。如果您將數據保存在您的應用程序中,那麼您可以創建一個界面供您的每個片段執行,並且您的主要活動只需調用當前選定的片段上的該界面即可。

相關問題