我正在编辑一个在服务中进行 GPS 调用的 android 应用程序的代码。位置监听器。它还使用ServiceConnection
在某些视图中,设备认为我的应用程序响应时间过长,并且用户可以“强制关闭”或“等待”。在此弹出窗口出现之前,用户仍然可以使用该应用程序,他们可以滚动、滑动、按下按钮等。
我只是假设这与 GPS 服务有关,因为它在发生此问题时正在运行。
我听说这个问题与 UIthread 上运行的线程有关,而不是后台线程。但我确信服务在后台线程中异步运行。
洞察力赞赏
我正在编辑一个在服务中进行 GPS 调用的 android 应用程序的代码。位置监听器。它还使用ServiceConnection
在某些视图中,设备认为我的应用程序响应时间过长,并且用户可以“强制关闭”或“等待”。在此弹出窗口出现之前,用户仍然可以使用该应用程序,他们可以滚动、滑动、按下按钮等。
我只是假设这与 GPS 服务有关,因为它在发生此问题时正在运行。
我听说这个问题与 UIthread 上运行的线程有关,而不是后台线程。但我确信服务在后台线程中异步运行。
洞察力赞赏
使用服务不一定会产生新线程,服务调用在其调用者线程上运行。来自 android API 服务文档:“请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行......”。
您可以指定服务在不同的进程上运行,但最佳做法是在服务中生成一个新线程。
有关 android 服务的更多信息,请访问:http: //developer.android.com/reference/android/app/Service.html
我完全建议您扩展 AsyncTask,它可以正确和轻松地使用 UI 线程。允许您在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。您可能希望在 doInBackground 方法中进行所有计算。顺便说一句,强制关闭或等待是此类问题的经典行为。祝你好运!!!
服务中的处理仍然会导致您的应用程序挂起。
您应该考虑实施的解决方案是在单独的线程中运行任何可能使您的活动陷入困境的逻辑。这包括:数据库更新/插入、网络通信和任何其他长时间运行的代码。
AsyncTask 是一种方便的方法,因为您可以在 onPreExecute 和 onPostExecute 函数中操作 UI。
您可以将 AsyncTask 作为子类直接在您的服务中实现。
希望这有帮助!干杯