我正在编辑制作服务中的GPS呼叫的Android应用程序的代码。LocationListener。它还使用ServiceConnection

在某些视图中,设备决定我的应用程序正在花费太长以响应,并且用户可以“强制关闭”或“等待”。在出现此弹出窗口之前,应用程序仍可用于用户,可以滚动,幻灯片,按按钮等。

我只是假设这与GPS服务有关,只要发生这个问题就会运行。

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

洞察力赞赏

有帮助吗?

解决方案

使用服务不一定会产生一个新的线程,服务呼叫在它的来电线程上运行。从Android API Service Doc: “请注意,与其他应用程序对象一样,服务在其托管过程的主线程中运行..”。

您可以指定在不同的过程中运行的服务,但最佳实践是在服务中产生新的线程。

更多关于Android服务: http://developer.android.com/reference/android/app/service.html

其他提示

我完全建议您扩展ASYNCTASK,它可以实现UI线程的正确和轻松。允许您在UI线程上执行后台操作并发布结果,而无需操纵线程和/或处理程序。您可能希望在DoInbackground方法中完成所有计算.BTW Force Close或Wait 是这种问题的经典行为。 祝你好运!!!

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

您应该查看实现的解决方案是运行任何可能在单独的线程中逐步浏览活动的逻辑。这包括以下内容:数据库更新/插入,网络通信和任何其他长运行代码。

ASYNCTASK是一个方便的方法,因为您可以在OnPreexecute和OnPostexecute函数中操作UI。

您可以将您的服务直接作为子类实现ASYNCTASK。

搭配这有助于! 干杯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top