【问题标题】:Button Clicks Get Stuck on Android Widget if Http Call takes time to return如果 Http 调用需要时间返回,则按钮点击会卡在 Android 小部件上
【发布时间】:2012-12-01 15:27:43
【问题描述】:

我的小部件有两个按钮,用于在小部件中进行左右导航。如果我有一组数据,那么我使用左右箭头按钮在数据之间切换。为了更新数据,我每分钟进行一次 Http 调用。如果 http 调用需要时间才能返回,我的按钮点击开始累积,并在暂停 7-8 秒后突然连续触发。我正在为按钮使用 pendingIntents 并在小部件的广播接收器中接收它。

如果 HTTP 调用速度很快,按钮点击就可以正常工作。

但是,如果 HTTP 调用返回缓慢,并且我在右箭头上单击 10 次,而单击不会发生任何事情,并且在 7-8 秒后会瞬间触发 10 次单击。

请建议我如何才能阻止我的按钮点击被阻止然后连续触发。

HTTP 调用缓慢是按钮卡住的真正原因吗?

【问题讨论】:

  • 更好地使用异步任务并在 doInBackground() 方法中进行 http 调用。

标签: android android-widget widget android-pendingintent


【解决方案1】:

您不应该从您的 UI 线程进行 HTTP 调用,因此请确保您使用 AsyncTask 来执行任何 i/O 或网络操作。

AsyncTask

【讨论】:

    【解决方案2】:

    这可能是因为您在 UI 线程上执行 HTTP 请求不是一个好主意,因为 HTTP 请求可能像其他网络任务或 I/O 任务一样需要时间,并且 android 会检测到这一点并可能向用户显示 ANR消息(应用程序没有响应)并询问用户是否要强制关闭应用程序。

    您需要在触发 onclick 事件的 ASyncTask 中运行 HTTP 请求。这样,将为 HTTP 内容创建一个新线程,同时用户界面可以继续工作并接受用户输入而不是锁定。

    【讨论】:

    • 嗨,我已经在为 HTTP 请求使用不同的线程。只是我使用的是普通的 JAVA 线程和 Runnable,而不是 AsyncTask。另外,我也尝试使用 AsyncTask,行为仍然相似。这种卡住行为只发生在较慢的网络上。
    • 我认为这不起作用,我不记得确切的原因,但我记得有这个问题。它需要在 ASyncTask 中运行,所有工作都在 doInBackground 方法中完成
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多