2010-02-05 35 views
1

实际上,这个问题适用于需要远程服务器数据的任何窗口小部件。面向Android应用的主屏幕小部件的Facebook如何工作?

答案将是纯粹的猜测,但您如何看待小部件获取其数据?对于那些不知道的人,这个小部件会显示你朋友的最新状态更新历史。

  1. 小部件轮询API直接从一些 服务,公司在 背景,这轮询服务器运行
  2. 小部件争夺数据
  3. 不知怎的:

    ,我能想到的一些答案Facebook实施了 Android,我认为它不存在

  4. 该小部件以某种方式检测到 用户正在使用该屏幕并获取 数据点播

回答

2

我会说#1或#2。由于jleedev在他的回答中给出的原因,最有可能排在第二位。

请注意,要实现应用窗口小部件,请扩展AppWidgetProvider,它是一个BroadcastReceiver。这只是一个在后台运行的类,并通过RemoteViews将更新推送到屏幕上的小部件。因此,您在主屏幕上看到的不是实际运行的活动,而只是一个相当静态的视图,通过特定的BroadcastReceiver定期更新。我说这一切表明你的#1和#2之间没有太大的区别,因为你编写的所有主屏幕应用程序小部件代码都在后台运行。

你也不能真的做#4。不幸的是,您无法检测应用程序小部件何时在屏幕上。目前您可以做的最好的方法是安排闹钟来更新您的应用程序小部件,并使用标志来防止手机在睡着时发出警报。

+0

非常感谢,尤其是报警提示。我有点担心电池寿命。根据您的经验,您认为投票如何影响电池寿命? – 2010-02-05 17:52:13

0

我写的小部件运行一个服务,该服务定期从互联网中提取数据并将其推送到小部件。这似乎运作良好。

+0

服务轮询的频率如何?只要设备处于打开状态并且控件位于主屏幕上,它就会运行吗?你如何看待这影响电池寿命?抱歉有这些问题。 – 2010-02-05 17:08:51

+0

它在多少次设置活动中可以进行轮询的频率。是的,只要小部件在主屏幕上就会运行。我没有注意到对电池寿命有太多的负面影响,因为我通常每小时都会保持更新速度,但给用户提供这个选项实际上是处理这种情况的最佳方式。 – CaseyB 2010-02-05 21:20:14

0

我会假设#2。活动和小部件需要显示相同的内容,因此使用单个服务下载和缓存数据是有意义的。小部件在某个时间间隔为defined to update,但这不一定与服务下载数据的频率相同。我定期刷新的大多数应用程序都有一个设置来控制刷新频率,我想这将是一个服务设置。

+0

请注意,您可以定义android:updatePeriodMillis =“0”,然后使用警报来更新您的窗口小部件,从而使您能够通过您描述的设置修改更新频率。 – 2010-02-05 17:34:09

1

Android SDK documentation refers以示例简单维基词典 AppWidget。它运行一项服务,该服务定期从互联网上提取数据并将其推送回小部件。完整的源代码是available

文档says

如果你的应用程序的Widget设置过程 需要几秒钟(也许当 执行Web请求),你 要求你的进程继续, 考虑在 开始服务onUpdated () 方法...如果您每小时更新不超过一次,则此 可能不会导致电池寿命的显着问题。