2012-07-12 100 views
1

我開發,是爲了獲取用戶的位置和當前天氣信息的應用程序。在信息收集過程是這樣: StartGathering - >獲取經/緯度 - >獲取定位數據(城市,地址等)從COORDS - >獲取天氣信息 - >保存在SQL數據庫中的信息。 一切都是通過在包含數據的不同活動之間使用包發送字符串數組完成的。 爲了準確起見,該過程每X分鐘重複一次,但由於我已處理活動,所以更新過程會干擾設備上的其他應用程序。我爲流程中的每個活動添加了android:theme =「@ android:style/Theme.NoDisplay」,認爲這與在後臺執行相同。 我想在後臺收集信息並將其保存在數據庫中,並且據我所知,如果不使用服務,這是不可能的。轉換活動服務(機器人)

有沒有辦法輕鬆了一堆不同的活動轉化爲服務,從而讓應用程序收集必要的信息在後臺,以便用戶可以使用該設備沒有任何性能損失? 或者是否有可能讓活動在後臺執行某些工作而不干擾其他應用程序?

+0

我不知道如何從字面上做到這一點。但我想嘗試開始一個異步任務,並在完成主要意圖之後進行循環。我不知道它是否有效,但我只是給它一個鏡頭:) – Mert 2012-07-12 22:40:12

回答

3

有沒有一種方法可以輕鬆地轉換了一堆不同的活動,以服務...

否,創建一個Service(或Services)和複製/粘貼現有​​的代碼。要知道,雖然該應用程序的主線程(也稱爲UI線程)在Service運行,所以如果有工作要做,你需要使用的工作線程或者是使用IntentService這其中確實在後臺/工作線程默認工作的任何費時的工作。

或者是否可以讓活動在後臺執行某些工作而不干擾其他應用程序?

不,不是在路上你試圖去做。將Activity想象爲類似於Windows窗體(或類似的)。換句話說,它是一個允許用戶與應用程序交互的UI的框架。有(使用AsyncTask例如)做後臺工作在Activity的方式,但一個Activity不是一個泛型類可以隱藏起來,而它的一些「數字運算」。

+0

謝謝你的回答! 在使用服務時,我仍然可以使用相同的方法和發送/接收包嗎?我是否仍然可以用相同的方式進行編程:一個服務是否做了一些工作,在它自己銷燬之前,它會向另一個服務發送一個包,以便與前一個服務的其他信息做一些其他的工作? – Eric 2012-07-12 23:11:42

+0

@Eric:是的,「服務」可以啓動或綁定到另一個「服務」。至於傳遞數據,Android廣泛使用'Intents'來在應用程序的不同組件之間傳遞動作和傳遞數據。我想知道你是否真的需要多個'服務'。如果您的應用程序的「收集」過程總是要用您描述的固定步驟完成,那麼爲什麼不在一個「服務」內完成?擁有多個「服務」的唯一原因是每個服務都執行可能直接用於其他應用程序組件的獨特功能。 – Squonk 2012-07-12 23:30:08

2

從而使應用程序來收集必要的信息在後臺,以便用戶可以使用該設備沒有任何性能損失

如果你的程序是做什麼則是導致「性能損失「,可能對用戶來說不顯着或者不明顯,但是損失仍然存在。在我看來,你正在嘗試做的事情(根據你使用的間隔時間,獲取位置併發出網絡請求以獲取與每個X分鐘相關的天氣信息)將導致電池相當大的耗盡。如果您不希望他們抱怨您的應用程序耗盡電池,建議您將間隔時間留給用戶。

+0

我的意思是「沒有任何顯着的性能損失」。當我在手機上測試應用程序,並通過活動收集信息時,基本上不可能同時使用它。 當然,用戶將能夠配置其收集信息的頻率。 – Eric 2012-07-13 00:12:01