1

我有绑定服务。例如,该服务有一个方法 calculate(),它会执行一些非常密集的计算,如果活动关闭,应该继续执行(这就是为什么选择服务,而不是异步任务)。这个服务返回一些结果值,当它再次打开时应该显示在活动上。问题如下,如果必须返回一些值,如何优雅地避免绑定服务中的 ANR 错误?

4

2 回答 2

1

如果您使用Service它并不意味着您不需要线程(或 AsyncTask)。你实际上需要。

服务参考的摘录:

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。

所以,为了避免 ANR ,我只是把它放在AsyncTask里面。Service

更新:

AsyncTask 允许正确和轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

您可以使用以下方法更新主线程:

onProgressUpdate(Progress...),在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。

于 2013-10-30T09:33:40.010 回答
0

也可以在您的服务上使用 Thread 或 asynctask for calculate()。

于 2013-10-30T09:34:43.763 回答