2010-04-02 88 views
2

我已經實現了一個在我的應用程序和Google文檔之間執行異步同步的服務。我想在同步完成後更新我的應用程序的頂級活動。但是,由於該服務,應用可能處於未知狀態。有沒有辦法讓頂級活動成爲可能,從服務中的asynchtask重新創建自己。從異步服務更新活動

回答

2

在您的服務中,只需致電startActivity(new Intent(this, TopLevelActivity.class))。如果它尚未運行,它將啓動您的TopLevelActivity,或者在您的TopLevelActivity的方法正在運行時調用您的TopLevelActivity方法,並將其帶到最前面。如果您想收到通知,您可以覆蓋onNewIntent()並捕獲意圖。

+2

請記住,用戶不一定會欣賞在他們正在做的事情(例如,玩遊戲,鍵入文字消息,在撥打電話時使用撥號盤)突然冒出來的活動。 – CommonsWare 2010-04-02 18:53:38

+1

謝謝合作。這工作!但是我確實需要爲我的活動類添加一個靜態標誌,告訴我他們是否當前處於活動狀態。我暫停翻轉此標誌並繼續。這樣我就不會改變手機的狀態。如果活動已打開,我只需更新UI。我沒有覆蓋onNewIntent(),我檢查了一個布爾值,它被添加到我的服務發送的意圖中。這樣,如果意圖來自我的服務,我更新了用戶界面。由於布爾運算符的原因,我不太喜歡這種方法,但它的功能。再次感謝。 – 2010-04-02 18:55:33

+2

或者,您可以在'onResume()'中使用您添加到服務中的一些自定義方法將您的活動註冊到服務中。像'mService.registerActivity(this)'和'onService()'中的'mService.unregisterActivity(this)',這樣服務就知道Activity是否當前處於活動狀態。 – synic 2010-04-02 19:09:38

2

正確的方式做到這一點,我相信,是使用使用遠程接口AIDL: https://developer.android.com/guide/components/aidl.html

您做一個簡單的*.aidl文件與它的接口,和Android工具將生成接口類爲你。它將允許您註冊回調方法。比折騰startActivity意圖來得更乾淨。

+1

謝謝本。我會研究這個。 – 2010-04-02 20:58:51

2

您應該從服務中廣播一個意圖,然後讓該活動成爲廣播接收者。

這是一個寫在BroadcastReceiver

希望這會有所幫助。

+1

我讀過廣播不應該在你的應用程序內部進行通信時因爲開銷。我認爲本託賓的解決方案可能是最好的答案。 – 2010-04-03 04:20:29