后台服务持续更新用户界面

3
我希望运行一个服务,从外部传感器获取数据并在每秒更新UI,而不会阻塞主线程。最有效的方法是什么?线程,IntentService,Service?还是其他方法?
提前感谢!

你的问题的解决方案可能取决于你如何从外部传感器获取数据。 - Okas
我通过蓝牙套接字获取数据。我发送请求并获取数据。 - Márió Posta
那么您已经拥有了一个用于此BT套接字的线程。根据需要使用相同的线程并使用runOnUiThread更新UI。 - Okas
不,我没有永久线程。一个命令看起来像这样:ResetTroubleCodesCommand clear = new ResetTroubleCodesCommand(); clear.run(sock.getInputStream(), sock.getOutputStream());然后我获取数据。所以我需要在不同的线程中执行这些命令。 - Márió Posta
也许如果您发布您的代码会更好。 - Okas
4个回答

2
如果您想定期更新UI并且活动必须访问服务方法,则应使用绑定服务。 Service vs IntentService 在此链接中查看Android中绑定服务的工作方式。

1

1

首先-服务在UI线程上运行。因此,服务无法解决阻塞主线程的问题。当然,获取传感器读数很快,所以您不必担心它。

您还用数据做什么?如果只是为了更新UI,则不需要服务。只需在活动中注册传感器事件,并在获取传感器事件时更新UI即可。如果您想要执行其他操作,例如在应用程序在后台时保存数据,则可能需要查看服务。


我必须发送请求以获取数据,因此无法使用事件。 - Márió Posta

0

如果你的应用程序的目标是 Android 5.0(API 级别 21)或更高版本,则应使用 JobScheduler


我认为JobScheduler不适合我,因为它涉及实时数据,所以我必须每秒更新UI。 - Márió Posta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接