【问题标题】:Android NonUI Thread making application "not respond"Android NonUI Thread 使应用程序“无响应”
【发布时间】:2012-10-01 20:05:03
【问题描述】:

我正在编辑一个在服务中进行 GPS 调用的 Android 应用程序的代码。位置监听器。它还使用ServiceConnection

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

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

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

洞察力赞赏

【问题讨论】:

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


    【解决方案1】:

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

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

    有关 android 服务的更多信息,请访问: http://developer.android.com/reference/android/app/Service.html

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        您应该考虑实施的解决方案是在单独的线程中运行任何可能使您的活动陷入困境的逻辑。这包括:数据库更新/插入、网络通信和任何其他长时间运行的代码。

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

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

        希望这会有所帮助! 干杯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-09
          • 1970-01-01
          • 1970-01-01
          • 2015-12-10
          相关资源
          最近更新 更多