如何在不使用 runOnUiThread() 的情况下在服务中创建/运行 AsyncTask
我有一个 Service
,它创建用于下载文件的 AsyncTask
。在活动中,我们创建传递给 Activity.runOnUiThread()
的 Runnable
或 Thread
。我无法从服务访问该方法,那么如何正确使用 AsyncTask
(在不阻塞 UI 线程的情况下完成繁重的工作)?
I have a Service
that creates AsyncTask
s for downloading files. In activities, we create Runnable
s or Thread
s that we pass to Activity.runOnUiThread()
. I can't access that method from a service, so how do I use AsyncTask
correctly, (do heavy work without blocking the UI Thread)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的服务仅从您的应用程序调用,并且您可以将其设置为单例,那么请尝试以下操作:
现在您可以直接调用服务上的方法。因此,只需调用
downloadFile()
即可使服务正常运行。关于如何更新 UI 的真正问题。请注意,此方法接收一个
ProgressListener
实例。它可能看起来像这样:现在您只需从 Activity 更新 UI(而不是从服务更新 UI,服务仍然不知道 UI 的外观)。
If your service is only called from your application, and you can make it a singleton, then try this:
Now you can directly call methods on your service. So just call
downloadFile()
to put the service to work.About your real question of how to update the UI. Notice that this method receives a
ProgressListener
instance. It could look like this:Now you just update the UI from the activity (not from the service, which remains unaware of how the UI looks like).