发送和接收意图之间的巨大延迟
Posted
技术标签:
【中文标题】发送和接收意图之间的巨大延迟【英文标题】:Huge delay between sending and receiving an intent 【发布时间】:2017-01-03 14:45:35 【问题描述】:编辑:
我在这里解释的问题与意图无关。 相反,使用我选择的方法旋转位图需要 300 毫秒。 现在我找到了一种在10-15ms内旋转的方法,问题就解决了。
我的问题的一些背景:
我有一个指南针小部件和一个服务,当我按下小部件上的按钮时,它就会启动。 此服务向 android 询问 GPS 和传感器数据,并在几分钟内通过 Intent 将它们发送到小部件。 AppWidgetProvider 然后旋转指南针并执行其他操作。现在的问题:
当我按下该按钮时,服务会立即开始发送意图,小部件会延迟一到两秒处理传入的数据。服务运行一段时间后,它慢慢恢复正常,我觉得有点奇怪......
我认为最好将日志的两个部分并排发布来描述:
WidgetIntentService:onCreate() 被调用。 WidgetIntentService:服务 onStartCommand WidgetIntentService:服务已启动。 WidgetIntentService:更新开始。 WidgetIntentService:调用了 onDestroy()。 WidgetIntentService:航向:330.0 度 WidgetIntentService:航向:338.0 度 WidgetIntentService:航向:342.0 度 WidgetIntentService:航向:340.0 度 WidgetIntentService:航向:334.0 度 WidgetIntentService:航向:329.0 度 WidgetIntentService:航向:331.0 度 WidgetProvider1:旋转:330.0 WidgetIntentService:航向:330.0 度 WidgetProvider1:旋转:338.0 WidgetIntentService:航向:327.0 度 WidgetProvider1:旋转:342.0 WidgetIntentService:航向:326.0 度 WidgetProvider1:旋转:340.0 WidgetIntentService:航向:322.0 度 WidgetProvider1:旋转:334.0 WidgetIntentService:航向:316.0 度 ... WidgetIntentService:航向:334.0 度 WidgetProvider1:旋转:334.0 WidgetIntentService:航向:335.0 度 WidgetProvider1:旋转:335.0 WidgetIntentService:航向:335.0 度 WidgetProvider1:旋转:335.0 WidgetIntentService:航向:336.0 度 WidgetProvider1:旋转:336.0有时这种延迟直到我第二次启动服务才会消失。 本例中的日志如下所示:
... WidgetIntentService:GPS 停止。 WidgetIntentService:磁力计停止。 WidgetProvider1:旋转:293.0 WidgetProvider1:旋转:293.0 WidgetProvider1:旋转:294.0 WidgetProvider1:旋转:296.0 WidgetProvider1:旋转:299.0我的理论是,android 会缓冲意图,并且所有这些意图都会一次处理一个,直到小部件设法跟上。
有什么方法可以告诉我的 AppWidgetProvider 只接受收到的最后一个意图并忽略所有其他意图?
如果您知道如何以更好的方式做到这一点,请告诉我!
【问题讨论】:
【参考方案1】:这就是 IntentService 的作用——它将请求排队并在单个非 UI 线程上一次处理一个。如果您不想要这种行为,请不要使用 IntentService。使用服务并自己处理任何线程。
【讨论】:
我在选择之前阅读了意图服务和普通服务,我决定使用手动创建新线程的普通服务。即使这种行为符合预期,我也不想要它......有什么办法可以解决这个问题吗?以上是关于发送和接收意图之间的巨大延迟的主要内容,如果未能解决你的问题,请参考以下文章