使用什么在后台执行网络操作?

发布于 2024-12-14 04:15:41 字数 141 浏览 1 评论 0原文

我正在从 BroadcastReceiver 执行网络操作。此操作正在后台执行,发生这种情况时应用程序将不会运行。

使用哪个更好? Service 还是 AsyncTask

I am performing a network operation from a BroadcastReceiver. This operation is being performed in the background and the app will not be running when this happens.

Which is better to use? A Service or an AsyncTask?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

_失温 2024-12-21 04:15:41

BroadcastReceiver 对象仅在调用 onReceive() 期间有效。一旦您的代码从此函数返回,系统就会认为该对象已完成并且不再处于活动状态。因此,在这里使用 AsyncTaskThread 是有意义的。

同样来自 文档

特别是,您不得显示对话框或绑定到 BroadcastReceiver 内的服务。


如果此 BroadcastReceiver 是通过 标记启动的,则从该函数返回后该对象不再活动。这意味着您不应该执行任何异步返回结果的操作 - 特别是,对于与服务交互,您应该使用 startService() 而不是 bindService() 。如果您希望与已运行的服务交互,可以使用 peekService()

这意味着您可以从广播 rcvr 中 startService() 传递数据通过意图进行网络操作所需的。该服务将执行网络操作。如果服务是粘性的,您可以使用peekService()。但绝对不应该 bindService() 到广播 rcvr。

A BroadcastReceiver object is only valid for the duration of the call to onReceive(). Once your code returns from this function, the system considers the object to be finished and no longer active. So it makes sense to just use an AsyncTask or a Thread here.

Also from the documentation :

In particular, you may not show a dialog or bind to a service from within a BroadcastReceiver.


If this BroadcastReceiver was launched through a <receiver> tag, then the object is no longer alive after returning from this function. This means you should not perform any operations that return a result to you asynchronously -- in particular, for interacting with services, you should use startService() instead of bindService(). If you wish to interact with a service that is already running, you can use peekService()

What this means is you can startService() from your broadcast rcvr, pass the data required for your network operation thru an intent. The service will do the network operation. If the service is sticky, you can use peekService(). But never should you bindService() to a Broadcast rcvr.

卖梦商人 2024-12-21 04:15:41

更好地使用服务。 AsyncTask主要是不阻塞UI。

Better use a Service. AsyncTask is mainly not to block UI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文