2011-10-25 25 views
5

我在我的android應用程序中有一個WebView,其中有很多JavaScript被我們的服務器調用。我想實現一個系統,其中來自服務器的信號將喚醒/重新啓動應用程序並將其展示在前面以提醒用戶。我知道這是非常令人討厭的,但在我的情況下它是必要的。Android webview內的服務?

看來唯一的方法就是讓WebView在服務中生存(因爲活動可以隨時被操作系統殺死)。有誰知道這將如何工作?我讀過WebViews只能駐留在Activities中。

謝謝!

回答

4

WebViews只能存在於活動中,因爲它們是一個UI組件。解決這個問題的最好方法是將JavaScript正在進行的通信卸載到服務本身中。這只是Android的工作原理。唯一的解決方法是讓JavaScript /服務器通信具有足夠的容錯能力,以便在任何時候都可以承受失去連接的能力。有關如何做到這一點的想法,我會研究REST模型。如果你想更好地使用Android的REST,我建議這video from Google IO。至今,這是我的最愛之一。

只要從服務器發送信號啓動活動,這在某種程度上是可能的。你需要在設備上聽一些東西,很可能是服務。你可以讓你的服務做一個長期民意調查,因此就坐在那裏等待迴應。當得到是來自服務器的響應,它可能然後做一個

Context.startActivity(intent) 

其中的意圖是明確的意圖指定要啓動活動。也就是說,如果資源在設備上變得稀缺,服務也會被殺死。最重要的是,互聯網連接可能會隨時丟失(這些都是手機,人們通常會把手機放在沒有互聯網連接的地方)。

底線是,設備的連接設計不是100%可靠的。你要做的最聰明的事情就是改變你的應用規範,以便它們更容錯。

聽起來很生硬,但除了「不要這樣做,不要這樣做」之外,我可以說更多。更具建設性的是,我會說,如果你做對了事情,你應該能夠把你的東西推到後臺,並且永遠不會打擾用戶。請記住,KISS,它不僅僅是一支擁有軍隊的樂隊。這是一個美麗的哲學。保持簡單愚蠢。你可能想看看這個video,這是我最喜歡的之一,可能有助於讓你處於不同的心態。這有幫助嗎?

+0

好的,這是有道理的。您能否介紹一下將我的應用程序帶回前端的問題? – TomBomb

+0

編輯我的迴應,以進一步解決您的問題。 –

+0

感謝柯蒂斯,這是一個很大的幫助。我正在制定一個方法,不要完全依賴任何時候都活着的活動/服務。 我開始如上所述的活動,但我的問題是我需要我的應用程序,一旦意圖啓動後再次採取焦點。如果用戶在另一個應用程序中調用startActivity()時,我的應用程序將保留在後臺。有什麼想法嗎? – TomBomb

1

TomBomb,謝謝你接受我以前的回答,但我想我可能有別的用途給你。爲什麼不使用一個Status Bar Notification讓用戶知道來自服務器的新內容,而不是強迫一個活動進入前臺?