2010-03-04 73 views
1

我正在编写一个主屏幕小部件,按照Jeff Shakey的教程http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html在Android主屏幕小部件中使用Thread而不是Service可以吗?

本教程使用服务来避免任何ANR超时。我只是想知道,我可以使用Thread而不是服务来完成获取数据和更新RemoteViews的工作吗?我不想创建一个服务,因为Thread更容易处理并将数据传递给Thread。

谢谢。

回答

4

你不应该依赖线程。它不保证工作。从类似情况下的经验来看,线程方法在仿真器和三星Galaxy上工作,但在g1上不可靠。所以你应该真的尝试使用一项服务。这很简单:在清单和startService中定义。通过意图传递数据更麻烦一点,但它是可管理的,整个方法肯定更加强大。

+0

它保证*不*工作。 – CommonsWare 2010-03-04 19:07:55

+0

这是否意味着,线程不能在Android上工作,或者只是不能用于主屏幕部件? 主屏幕小部件,服务或服务+线程的最佳做法是什么? 我不得不从互联网加载数据来更新小部件屏幕,我必须避免ANR超时。 我只在模拟器和HTC Hero上测试过服务+线程和线程。它工作正常。如果它不能在其他设备上工作,我会放弃主题思路。 – user256239 2010-03-04 19:50:25

+1

请阅读流程生命周期: http://developer.android.com/intl/de/guide/topics/fundamentals.html#proclife 请注意,如果您的流程中没有运行任何组件(前台活动,在内容提供者的onReceive(),正在运行的服务或前台客户端中接收),那么系统会认为您的进程为空,并且可能随时被杀死。 – hackbod 2010-03-04 23:04:46

3

我看过一篇文章说,为了避免ANR,服务有时是不够的。线程是需要的。

参见:http://blog.elsdoerfer.name/2009/06/03/writing-an-android-widget-what-the-docs-dont-tell-you/

“你是鼓励使用服务来执行,如果你认为这样做可能需要较长的时间窗口小部件的更新,以避免应用程序无响应(ANR)超时然而,这通常是不够的...... ......

解决的办法是让你的服务启动一个单独的线程,例如Jeffrey Sharkey的android-sky Widget。

有什么想法?

相关问题