2012-08-14 57 views
1

所以我想要做的只是更新一个活动的视图,如每秒一次。在这个特定的情况下,一些按钮,我想改变的是他们的文字。我在这里读到了很多关于同样问题的问题,但我似乎比其他人更加困惑,而且我会责怪我对Android的限制体验(实际上这意味着我没有理解提出的解决方案,或者无法确定示例代码中的核心思想,并且这实际上是我第一次尝试为Android编程)。Android:定期用户界面更新和通信服务<->活动

因为我想要一个拥有数据(及其创建)的服务,所以我想到了对该活动的回调,这就是我一直试图在过去的几个小时内让我的头脑发现。我所拥有的服务是onCreate(),onStartCommand()onDestroy(),基本上没问题。我在Android清单文件中注册它,并成功实现了它(我正在记录生命周期方法)。

但是我怎么去

  • 拥有的观点与服务

  • 数据更新频繁给该服务的某些信息,这取决于(如通知它的按钮事件的)

感谢您的帮助!

+0

这里是一个完整的和当前的例子http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/ – 2012-08-15 00:43:29

+0

我读过它看起来像是有人将实际工作封装起来 - 这对任何人来说都是一件很好的事情,那就是尽可能快地试着去尝试。但是因为我宁愿学习如何做自己的东西,恐怕这对我没有太大用处。不过,非常感谢您的意见。 – 2012-08-15 12:28:32

回答

0

实际上,使用Timerandroid.os.Handler来更新自身内部的活动实际上是一种非常简单的方法。这个想法是为活动提供一个暴露更新方法的界面(例如IUpdateable)。然后扩展TimerTask(Handler, IUpdateable)作为参数并保留对它的引用。在TimerTaskrun()方法中,调用例如updateableActivity.update()。在该活动中,实例化Timer和时间表new UpdateTask(new Handler(), this);
这样你就有了一个实际可重用的方法(使用一个接口可以很容易地在任何活动中实现)。如果不清楚,看看这个gist

1

阅读官方Android文档Binding to a Service

它应该回答你所有的问题。

基本上,这个想法是,你“绑定”到一个服务,这样做会给你服务对象。从那里,你可以直接调用服务的方法。在你的情况下,你可能需要在你的服务中声明一个名为notifyButton1Pressed()或类似的方法。

要在一个时间间隔内刷新Activity的视图,请使用TimerTask和Timer。如果你通过Google进行研究,这些都是不言自明的。

+0

谢谢你的参考,我一定会去阅读基础知识。但就定期更新而言,由于任务是可运行的,因此定时器不会执行任何操作,并且UI更新不允许使用除UI线程之外的任何其它UI线程 – 2012-08-14 23:03:11

+0

在TimerTask中,使用处理程序将可运行列表发布到UI线程。 – you786 2012-08-14 23:12:27

+0

这里是一个完整的例子http://blog.philippheckel.com/2012/06/10/android-example-communication-between-activity-and-service-using-messaging/ – 2012-08-15 00:43:01

0

为了更新activityservice,你必须registeractivityBroadcastReceiver。在receiver你做你的更新,并在服务,你必须sendBroadcast到您的活动。和activityservice之间的信息,你可以通过Intent发送,由sendBroadcast发送。

+0

感谢您的意见,但我觉得定时更新肯定是有些东西使用计时器。我曾尝试发送意图,但我认为绑定更有用。并不是说我实际上可以判断它,但感觉就像少了一些开销。 – 2012-08-15 12:23:44