2012-01-12 187 views
1

我目前正在研究一個應用程序,該應用程序連接到藍牙設備並每0.25秒接收一條消息,然後在屏幕上顯示該數據。用戶還可以隨意啓動/停止將此數據記錄到SD卡上的文件中。Android後臺任務和生命週期

我已經嘗試過擴展一個線程類,它偵聽來自BT設備的消息,然後使用一個處理程序將數據發送回UI線程並顯示它。

這是工作正常,但配置更改,如屏幕旋轉,當活動被破壞和重新創建BT線程被複制,我不能再與它溝通。我沒有問題,如果我停止onStop()中的BT線程並在onResume()中重新啓動它,但然後我需要重新連接到BT設備,並且如果用戶正在記錄數據,那麼將會中斷。

完成此功能的正確方法是什麼?有沒有一種方法來設置我的線程,使其不會重複,或者可以在更改配置後重新連接到它?我是否應該爲BT連接和日誌記錄查看服務,然後以某種方式從服務中獲取供稿以在UI上顯示?

謝謝!

回答

3

如果我不是在看一個服務於我的BT連接和記錄,然後以某種方式得到服務的供給,以顯示在用戶界面?

是的,你應該。我認爲這是一個好方法。您應該在線程中將日誌數據運行到服務中,並將需要傳遞給主UI或活動的數據放入一個sharedpreference中,以便ANY活動訪問該信息。

我認爲這將是最好的方式去做這件事。

OR

你可以使用由alex.veprik

+1

這是可能是最好的解決方案,因爲您還需要防止手機在操作過程中接聽電話。 – Wizetux 2012-01-12 01:39:08

+0

@Wizetux正是這正是我的想法。好點子。 – 2012-01-12 01:42:54

+0

這是我沒有考慮過的一個很好的觀點。我不熟悉服務,但是從閱讀這裏的文檔:http://developer.android.com/reference/android/app/Service.html我想我開始得到一個很好的理解。 – Matt 2012-01-12 01:55:13

1

您可以防止您的活動在配置更改時重新創建。 只需修改清單文件:

<activity android:name=".MyActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation" /> 
+1

由於提供的方法,即正常工作,但我是在他們的印象讀取其他地方也就是那種不好的做法。我一直在尋找服務,它開始看起來可能是要走的路,但我需要找出是否有可能將消息發回服務,以便我可以將數據發送到BT設備。 – Matt 2012-01-12 01:38:40

+1

您可以通過意向將消息發送回服務。查看Android SDK附帶的音樂播放器的示例代碼。他們將消息傳遞給那裏的服務。 – Wizetux 2012-01-12 02:02:20

+0

有幾種方法,如已在這裏評論SharedPreferences,或廣播意圖,或使用Messenger,這裏解釋 http://developer.android.com/guide/topics/fundamentals/bound-services.html – 2012-01-12 04:58:32