0

我正在編輯在服務中進行GPS調用的Android應用程序的代碼。 LocationListener的。它也使用ServiceConnectionAndroid NonUI線程製作應用程序「未響應」

在某些視圖中,設備決定我的應用程序花費很長時間來響應,並且用戶可以「強制關閉」或「等待」。這個彈出窗口前,應用程序仍然是由用戶使用,他們可以滾動,滑動,按下按鈕等

我只是假設,因爲它在運行時發生此問題,這是關係到GPS的服務。

聽說這個問題已經做的UIthread一個線程運行,而不是後臺線程。但我確定服務在後臺線程中異步運行。

洞察讚賞

回答

2

使用的服務並不一定產生一個新的線程,服務調用它的調用者的線程中運行。從android API服務文檔: 「請注意,與其他應用程序對象一樣,服務在其託管過程的主線程中運行..」。

可以指定一個不同的進程中運行的服務,但最佳實踐是產生新線程的服務。

更多Android上的服務在: http://developer.android.com/reference/android/app/Service.html

1

我全力推薦你擴展的AsyncTask,它能夠正確且容易使用的UI線程。允許您執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。您可能想要在doInBackground方法中執行所有計算.BTW 強制關閉或等待是此類問題的經典行爲。 祝您好運!

0

在服務中處理仍然可能導致您的應用程序掛起。

您應該考慮實施的解決方案是運行任何可能導致您的活動陷入單獨線程的邏輯。這包括以下內容:數據庫更新/插入,網絡通信以及任何其他長時間運行代碼。

AsyncTask是一個方便的方法,因爲您可以在onPreExecute和onPostExecute函數中操作UI。

您可以直接在您的服務中實現一個AsyncTask作爲子類。

Hoepfully這有助於! 乾杯