2012-08-14 26 views
1

所以我想要做的只是更新一個活動的視圖,如每秒一次。在這個特定的情況下,一些按鈕,我想改變的是他們的文字。我在這裏讀到了很多關於同樣問題的問題,但我似乎比其他人更加困惑,而且我會責怪我對Android的限制體驗(實際上這意味着我沒有理解提出的解決方案,或者無法確定示例代碼中的核心思想,並且這實際上是我第一次嘗試爲Android編程)。Android:定期用戶界面更新和通信服務<->活動

因爲我想要一個擁有數據(及其創建)的服務,所以我想到了對該活動的回調,這就是我一直試圖在過去的幾個小時內讓我的頭腦發現。我所擁有的服務是onCreate(),onStartCommand()onDestroy(),基本上沒問題。我在Android清單文件中註冊它,併成功實現了它(我正在記錄生命週期方法)。

但是我怎麼去

  • 擁有的觀點與服務

  • 數據更新頻繁給該服務的某些信息,這取決於(如通知它的按鈕事件的)

感謝您的幫助!

+0

這裏是一個完整的和當前的例子http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/ – 2012-08-15 00:43:29

+0

我讀過它看起來像是有人將實際工作封裝起來 - 這對任何人來說都是一件很好的事情,那就是儘可能快地試着去嘗試。但是因爲我寧願學習如何做自己的東西,恐怕這對我沒有太大用處。不過,非常感謝您的意見。 – 2012-08-15 12:28:32

回答

0

實際上,使用Timerandroid.os.Handler來更新自身內部的活動實際上是一種非常簡單的方法。這個想法是爲活動提供一個暴露更新方法的界面(例如IUpdateable)。然後擴展TimerTask(Handler, IUpdateable)作爲參數並保留對它的引用。在TimerTaskrun()方法中,調用例如updateableActivity.update()。在該活動中,實例化Timer和時間表new UpdateTask(new Handler(), this);
這樣你就有了一個實際可重用的方法(使用一個接口可以很容易地在任何活動中實現)。如果不清楚,看看這個gist

1

閱讀官方Android文檔Binding to a Service

它應該回答你所有的問題。

基本上,這個想法是,你「綁定」到一個服務,這樣做會給你服務對象。從那裏,你可以直接調用服務的方法。在你的情況下,你可能需要在你的服務中聲明一個名爲notifyButton1Pressed()或類似的方法。

要在一個時間間隔內刷新Activity的視圖,請使用TimerTask和Timer。如果你通過Google進行研究,這些都是不言自明的。

+0

謝謝你的參考,我一定會去閱讀基礎知識。但就定期更新而言,由於任務是可運行的,因此定時器不會執行任何操作,並且UI更新不允許使用除UI線程之外的任何其它UI線程 – 2012-08-14 23:03:11

+0

在TimerTask中,使用處理程序將可運行列表發佈到UI線程。 – you786 2012-08-14 23:12:27

+0

這裏是一個完整的例子http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/ – 2012-08-15 00:43:01

0

爲了更新activityservice,你必須registeractivityBroadcastReceiver。在receiver你做你的更新,並在服務,你必須sendBroadcast到您的活動。和activityservice之間的信息,你可以通過Intent發送,由sendBroadcast發送。

+0

感謝您的意見,但我覺得定時更新肯定是有些東西使用計時器。我曾嘗試發送意圖,但我認爲綁定更有用。並不是說我實際上可以判斷它,但感覺就像少了一些開銷。 – 2012-08-15 12:23:44