发送和接收意图之间的巨大延迟

时间:2016-08-26 21:01:52

标签: android android-intent service android-widget appwidgetprovider

修改

我在这里解释的问题与意图无关。 相反,使用我选择的方法旋转位图需要300毫秒。 现在我找到了一种在10到15毫秒内旋转的方法,所以问题就解决了。

我的问题的一些背景:

  • 我有一个罗盘小部件和一个服务,当我按下小部件上的按钮时,它会启动。
  • 此服务要求android提供GPS和传感器数据,并通过意图将它们发送到小部件几分钟。
  • 然后AppWidgetProvider旋转罗盘针并做其他事情。

现在出现问题:

  • 当我按下该按钮时,服务会立即开始发送意图,小部件会在一到两秒的时间内处理传入的数据。

服务运行一段时间后,它会慢慢恢复正常,我觉得有点奇怪......

我认为最好只将日志的两个部分张贴在彼此旁边来描述:

WidgetIntentService: onCreate() called.
WidgetIntentService: Service onStartCommand
WidgetIntentService: The service has started.
WidgetIntentService: Updates started.
WidgetIntentService: onDestroy() called.
WidgetIntentService: Heading: 330.0 degrees
WidgetIntentService: Heading: 338.0 degrees
WidgetIntentService: Heading: 342.0 degrees
WidgetIntentService: Heading: 340.0 degrees
WidgetIntentService: Heading: 334.0 degrees
WidgetIntentService: Heading: 329.0 degrees
WidgetIntentService: Heading: 331.0 degrees
WidgetProvider1: Rotation: 330.0
WidgetIntentService: Heading: 330.0 degrees
WidgetProvider1: Rotation: 338.0
WidgetIntentService: Heading: 327.0 degrees
WidgetProvider1: Rotation: 342.0
WidgetIntentService: Heading: 326.0 degrees
WidgetProvider1: Rotation: 340.0
WidgetIntentService: Heading: 322.0 degrees
WidgetProvider1: Rotation: 334.0
WidgetIntentService: Heading: 316.0 degrees

...

WidgetIntentService: Heading: 334.0 degrees
WidgetProvider1: Rotation: 334.0
WidgetIntentService: Heading: 335.0 degrees
WidgetProvider1: Rotation: 335.0
WidgetIntentService: Heading: 335.0 degrees
WidgetProvider1: Rotation: 335.0
WidgetIntentService: Heading: 336.0 degrees
WidgetProvider1: Rotation: 336.0

有时这种延迟在我第二次启动服务之前不会消失。 这就是日志在这种情况下的样子:


...

WidgetIntentService: GPS stopped.
WidgetIntentService: Magnetometer stopped.
WidgetProvider1: Rotation: 293.0
WidgetProvider1: Rotation: 293.0
WidgetProvider1: Rotation: 294.0
WidgetProvider1: Rotation: 296.0
WidgetProvider1: Rotation: 299.0

我的理论是,android会缓冲意图,并且所有这些意图一次一个地解决,直到小部件设法跟上。

有什么方法可以告诉我的AppWidgetProvider只接受最后收到的意图并忽略所有其他意图?

如果您对我如何以更好的方式做到这一点有任何想法,请告诉我!

1 个答案:

答案 0 :(得分:0)

这就是IntentService的作用 - 它将请求排队并在一个非UI线程上一次处理一个请求。如果您不想要这种行为,请不要使用IntentService。使用服务并自己处理任何线程。