【问题标题】:I/Choreographer: Skipped 9622 frames! The application may be doing too much work on its main threadI/Choreographer:跳过了 9622 帧!应用程序可能在其主线程上做了太多工作
【发布时间】:2016-01-09 18:58:51
【问题描述】:

我正在运行警报管理器,我需要从 3 个不同的 SQLite DB 中获取数据,并根据需要显示通知的条件。一次通知可能超过 5 个。我收到错误消息:跳过 9622 帧!应用程序可能在其主线程上做了太多工作。并且应用程序也将停止。有什么方法可以运行 alarmManager 以线程或异步方式显示通知,这样我就不会损害应用程序的性能。

【问题讨论】:

  • 如何缩短这个时间范围?因此,性能太慢。有什么解决办法????

标签: android multithreading performance android-sqlite


【解决方案1】:

你应该是:

  • PendingIntent 上使用getBroadcast(),创建PendingIntent 以传递给AlarmManager 上的方法

  • 让广播 Intent 指向 WakefulBroadcastReceiver 的子类

  • 让接收者调用startWakefulService()Intent 指向你工作的IntentService

  • onHandleIntent() 末尾有IntentService 调用completeWakefulIntent()

这会将您的工作置于后台线程(由IntentService 提供),并使您的进程更有可能存活足够长的时间来完成工作。

不过,此外,您确实需要查看您正在做的工作。 9622 帧约为 160 秒,或超过 2.5 分钟。这非常长时间让您的应用忙于在后台执行某些操作,特别是如果您在大部分时间都没有阻塞网络 I/O 或其他操作。

【讨论】:

  • 我这样使用:在 pendingIntent 上使用 getBroadcast() 并传递给 AlarmReceiver。在 AlaramReceiver 中,onReceive 覆盖方法我将 Intent 发送到 AlarmService 在 AlaramService 中我正在发送通知,并在日期进行一些计算。通知即将到来,但不是在确切的时间。 6-7分钟后我可能会这样做。我正在跳过 9622 帧!应用程序可能在其主线程上做了太多工作。如果您想要代码明智的流程,我也可以发布。请让我摆脱这个问题。
猜你喜欢
  • 2018-04-13
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多