我只是接近Android服務,但我有很多疑惑。這裏有一些問題。 在開始之前,請注意我已閱讀這些頁面 Android Services (official) Bounded Services (official) plus sone內在類語言在我的語言。請耐心等待,我仍然有點困惑。所有的請介紹一些Android的服務理念
1)首先,服務區別於一個的AsyncTask主要是因爲它繼續運行也如果應用被暫停(即,用戶正在觀看其他應用); AsyncTask在這種情況下被停止。是好的還是我錯了? 2)服務在通過startService()啓動它的活動的同一線程中運行。 爲了不影響活動的性能,我必須爲該服務創建一個單獨的線程,例如實現Runnable接口。另一種方法是創建一個擴展IntentService的服務,該服務自動爲該服務提供一個新線程:在任何onHandleIntent()調用上創建一個新線程。
現在,讓我們看一下我的具體問題。我需要創建一個將被許多活動使用的服務:他的任務是每60秒連接一次服務器數據庫並檢查新聞。如果發現新聞,通知有新消息(如果我們在MainActivity上)或顯示新消息的標題(如果我們在新聞閱讀器中)。我應該如何編碼? 我做了一個實例化NewsService並立即調用startService()的MainActivity。另一方面,我有NewsService擴展IntentService,(當onHandleIntent被調用時創建一個新線程?)並尋找新消息。使用IntentService是不是一個好主意?我意識到,無限期地啓動服務調用startService()會非常難看。 在這個練習的開始,我付出了努力,這是一個很好的解決方案,因爲它會自動創建一個新的線程並使服務實現變得簡單。但現在我有一些疑惑(我不知道是否有新聞!MainActivity如何知道它?以及如何獲得標題)
這應該用一個正常擴展的Thread類來完成,它使得無限的cicle在run()方法中,每60秒檢查一次新聞,如果有新的,從遠程DB讀取標題並更新活動按鈕/視圖。然後,如果應用程序將被用戶關閉,服務也將被關閉。 但問題是,如果我istantiate這種類是當在MainActivity暫停或停止工作將停止,因爲新的線程不會在此刻獲得新聞等活動(在這種情況下播音員)不能得到任何更新。所以我需要一個服務。
我希望這是清楚的。我應該如何以正確的方式實施解決方案? 請突顯一切錯在我的文字,我真的需要學習:d
謝謝。我其實對廣播意圖和廣播接收器一無所知:如果沒有人給我一個解決方案,我會直接閱讀相關的文檔:D。順便說一句,我不能相信我已經瞭解了一切xD – mark
這可能會給你一些'廣播'的理解:http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html –
此外,這篇文章有關於安排通過'AlarmManager'服務並通過'Broadcasts'發佈更新:http://www.vogella.com/tutorials/AndroidServices/article.html –