【发布时间】:2012-05-21 11:42:59
【问题描述】:
我有点困惑,在什么情况下我需要使用 Service、asyncTask 和 Broadcast Receiver 等应用程序组件。
谁能解释一下它们之间的确切区别以及我需要在哪里使用这些组件?
【问题讨论】:
标签: android service android-asynctask broadcastreceiver
我有点困惑,在什么情况下我需要使用 Service、asyncTask 和 Broadcast Receiver 等应用程序组件。
谁能解释一下它们之间的确切区别以及我需要在哪里使用这些组件?
【问题讨论】:
标签: android service android-asynctask broadcastreceiver
AsyncTask 是一种创建异步执行某些工作的新线程的友好方式。
广播接收器类似于系统事件的事件处理程序。它可以运行在 背景并在发生某些事情时执行操作,例如关闭手机或打开 wifi..
Service 只是一个在后台运行的应用程序(如守护程序)并为应用程序提供信息或仅执行任务。
对不起我的英语,我试着让我理解但它不是我的母语
【讨论】:
我将直接介绍到目前为止我在项目中应用这三个的地方:
1.Service:您希望在后台执行的操作,无需任何用户交互。例如连续获取位置数据或连续向您的服务器发送一些数据。您还可以使用服务每隔几个时间单位执行任务。例如发送十分钟的后台更新。
2.AsyncTask:创建一个新的执行线程。到目前为止我遇到的最佳用途是调用 Web 服务。我使用 AsyncTask 执行以下操作以调用 Web 服务 1.onPreExecute()中显示进度条 2.在 doInBackground(Params...) 中执行我的 Web 服务调用 3.在 onPostExecute(Result) 中更新 UI 或对来自 Web 服务的响应做一些其他的事情。
3.BroadCastRecievers 就像您的应用程序的全局接收器。它们可以侦听系统事件(例如手机重启)或您应用程序中的自定义事件。我用它们在手机重启时启动服务,当我们重新启动时停止服务关掉手机。
【讨论】:
让我用一个用例解释一下,让你更好地理解它-
AsyncTask - 想要从服务器获取一些东西,或者向服务器发布一些东西?如果我们在主线程上这样做,用户将无法与应用程序交互。因此使用了 Asynctask,它在不同的线程中执行网络活动。
服务 - 想要在后台管理某些内容?比如每 10 分钟或 1 小时获取一次用户的位置,或者在用户穿越特定区域时根据位置提醒用户。即使应用没有打开,Service 也会让应用运行(用户可能在做其他事情,或者手机被锁定,Service 仍然在后台运行)。
广播接收器 - 假设您正在本地跟踪位置和存储(当互联网中断时)。不是在互联网启动时,您想发送所有这些。因此,您向操作系统注册,希望监听该特定事件,并获得控制权。 或者当你想让服务器知道设备重启了,那么我们只需要实现即可。
清除?
【讨论】:
服务及其本地内存变量被加载到内存中并始终运行
广播接收器只保证在内存中并在处理事件时运行。
如果内存不足,操作系统可以从内存中删除广播接收器。
【讨论】:
“服务”是一个在后台运行的组件,不与用户交互。每个开发人员都可以在他的应用程序中创建新的服务。服务支持真正的 Android 多任务处理,因为它们可以在自己的进程中运行。
“AsyncTask”封装了Threads和Handlers的创建。 AsyncTask 通过 execute() 方法启动。execute() 方法调用 doInBackground() 和 onPostExecute() 方法。 主要目的是在没有用户交互的情况下下载内容。
“广播接收器”是一个扩展广播接收器的类,它通过 AndroidManifest.xml 文件(或通过代码)在 Android 应用程序中注册为接收器。您可以通过 Context.registerReceiver() 方法动态注册广播接收器. BroadcastReceiver 类定义了 onReceive() 方法。只有在这个方法期间你的BroadcastReceiver对象才有效,之后Android系统可以回收 广播接收器。
【讨论】: