我一直在使用Google地圖的Android應用程序,然後在後臺運行一些冗長的網絡密集型操作。目前,我正在使用一個線程來運行它們,它們需要30秒到7分鐘才能完成。在觀看關於AstrianTasks和後臺服務的Pluralsight的一些課程後,我現在知道線程理想情況下不應該用於超過幾秒的任何事情。我現在正在改變我的解決方案,使用GPS進行實時運行,而不是花幾分鐘時間來執行這些操作。目標是每更新一次數組OnLocationChanged事件。我應該如何設置我的Android Google地圖應用程序?
我在思考如何在每次OnLocationChanged事件時改變全局數組,同時從UI主線程訪問它時遇到問題。完成此操作的最佳選擇是什麼?我能夠使用進程或AsynTask來完成這個任務嗎?還是需要去客戶端/服務器路由? OnLocationChanged在哪裏被調用?
對不起,但這是絕對錯誤的。在UI線程上運行應儘可能快,以免使應用程序無響應。 AsyncTasks不應該被使用超過幾秒鐘,因爲所有任務共享一個單獨的線程(除非您調用executeOnExecutor,在這種情況下,您可以給它自己的線程)。線程可以根據需要繼續運行,並且應該是長期多任務的主要來源。 –
對不起,我應該澄清,但我的意思是超過200毫秒,應該進入一個線程。我觀看的視頻只是提到任何線程花費超過幾秒鐘的時間都可能會丟失,所以在冗長的情況下使用後臺服務會很明智。如果我打開另一個應用程序並將其放在視圖之外,這些線程一次只能運行幾分鐘仍然安全嗎? – mschmidt9026
是的。當然這並不一定是可怕的。如果你的線程在IO上等待,那沒關係(它在OS中處於暫停狀態並且不會佔用CPU)。如果ts積極解碼這是另一回事。然而,有一些方法可以告訴線程在onPause中暫停或停止,並告訴它在onResume中啓動。 –