所以我要做的只是每隔一段时间更新一次活动的视图,比如每秒一次。在这种特定情况下,只有几个按钮,我想更改的只是它们的文本。我在这里读过很多解决相同问题的问题,但我似乎比其他人卡住了一点,我要归咎于我对 Android 的有限体验(这实际上意味着,我不理解提出的解决方案,或者无法识别示例代码中的核心思想, 这实际上是我第一次尝试为 Android 编程)。
由于我希望服务拥有数据(及其创建),因此我想到了对该活动的回调,这就是我在过去几个小时中一直在尝试的。我所拥有的是onCreate()
,onStartCommand()
和onDestroy()
的服务,基本上,这很好。我在 android 清单文件中注册了它,并成功地让它栩栩如生(我正在记录生命周期方法)。
但是我该怎么去
-
使用服务中的数据频繁更新视图
-
为服务提供它所依赖的某些信息(例如通知它按钮事件)
感谢您的帮助!
从官方 Android 文档中阅读有关绑定到服务的信息。
它应该回答您的所有问题。
基本上,这个想法是你"绑定"到一个服务,这样做会给你服务对象。从那里,您可以直接调用服务的方法。在您的情况下,您可能需要在服务中声明一个名为 notifyButton1Pressed() 或类似方法的方法。
要按时间间隔刷新活动的视图,请使用计时器任务和计时器。如果你通过谷歌研究它们,这些都是不言自明的。
为了从service
更新您的activity
,您必须在activity
中register
一个BroadcastReceiver
。在进行更新的receiver
中,在服务中,您必须sendBroadcast
您的活动。activity
和service
之间的信息,您可以通过sendBroadcast
发送的Intent
发送。
实际上有一种非常简单的方法可以使用Timer
和android.os.Handler
从自身内部更新活动。这个想法是给活动一个接口(例如 IUpdateable
),以公开更新方法。然后扩展TimerTask
,将(Handler, IUpdateable)
作为参数并保留对它的引用。在TimerTask
的run()
方法中,调用例如 updateableActivity.update()
.在活动中,实例化Timer
并计划new UpdateTask(new Handler(), this);
。
这样你就有一个实际可重用的方法(使用接口可以在任何活动中轻松实现)。如果不清楚,请查看此要点。