Android NonUI线程制作应用程序“不响应”

时间:2012-10-01 20:05:04

标签: android service ui-thread background-thread serviceconnection

我正在编辑在服务中进行GPS通话的Android应用程序的代码。 LocationListener的。它还使用ServiceConnection

在某些视图中,设备决定我的应用程序响应时间过长,并且用户可以“强制关闭”或“等待”。在此弹出窗口出现之前,用户仍然可以使用该应用程序,他们可以滚动,滑动,按下按钮等。

我只是假设这与GPS服务有关,因为它会在发生此问题时运行。

我听说这个问题与在UIthread上运行的线程有关,而不是后台线程。但我确信服务在后台线程中异步运行。

洞察力赞赏

3 个答案:

答案 0 :(得分:2)

使用服务不一定会产生新线程,服务调用会在其调用者线程上运行。来自android API Service doc: “请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。”。

您可以指定要在不同进程上运行的服务,但最佳做法是在服务中生成新线程。

更多关于Android服务的信息: http://developer.android.com/reference/android/app/Service.html

答案 1 :(得分:1)

我完全建议您扩展AsyncTask,它可以正确,方便地使用UI线程。允许您在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。您可能希望在doInBackground方法中执行所有计算.BTW 强制关闭或等待是此类问题的典型行为。 祝你好运!!!

答案 2 :(得分:0)

服务中的处理仍然可能导致应用程序挂起。

您应该考虑实现的解决方案是运行任何可能在单独的线程中阻碍您的活动的逻辑。这包括以下内容:数据库更新/插入,网络通信以及任何其他长时间运行的代码。

AsyncTask是一种方便的方法,因为您可以在onPreExecute和onPostExecute函数中操作UI。

您可以在服务中直接实现AsyncTask作为子类。

这很有帮助! 干杯