roi*_*erg 753 multithreading android android-service android-intentservice
有人可以告诉我一个IntentService可以用a无法完成的事情的例子Service(反之亦然)吗?
我也相信IntentService在不同的线程中运行而Service不是.所以,据我所知,在自己的线程中启动服务就像开始一样IntentService.不是吗?
如果有人可以帮我解决我的两个问题,我将不胜感激.
Jos*_*hez 1320
Tejas Lagvankar写了一篇关于这个主题的好文章.以下是Service和IntentService之间的一些主要区别.
什么时候用?
该服务可用于没有UI的任务,但不应太长.如果需要执行长任务,则必须使用Service中的线程.
该IntentService可以在较长的任务中使用通常与主线程没有沟通.如果需要通信,可以使用主线程处理程序或广播意图.另一种使用情况是需要回调时(Intent触发的任务).
怎么触发?
该服务是通过调用方法所触发startService().
该IntentService使用触发的意图,它产生一个新的工作线程和方法onHandleIntent()调用这个线程.
触发来自
运行
该服务在后台运行,但其上运行的应用程序的主线程.
该IntentService运行在一个单独的工作线程.
限制/缺点
该服务可能会阻止该应用程序的主线程.
该IntentService不能并行运行的任务.因此,所有连续的意图将进入工作线程的消息队列,并将按顺序执行.
什么时候停?
如果您实施服务,则您有责任在工作完成后通过调用stopSelf()或停止服务stopService().(如果您只想提供绑定,则不需要实现此方法).
该IntentService停止服务后,都开始请求被处理,所以你从来没有打电话stopSelf().
Com*_*are 160
如果有人可以向我展示一些可以使用intentService完成的事情的示例,而无法通过服务完成,反之亦然.
根据定义,这是不可能的.IntentService是ServiceJava代码编写的子类.因此,任何一个IntentService呢,一个Service可以做,通过包括代码的相关位IntentService使用.
使用自己的线程启动服务就像启动IntentService一样.不是吗?
a的三个主要特征Service是:
后台线程
IntentService传递给s 的自动排队IntentService,因此如果在后台线程上Intent处理一个onStartCommand(),则其他命令排队等待轮到他们
一旦队列为空Intent,通过调用自动关闭onHandleIntent()
任何和所有这些都可以通过IntentService不扩展来实现stopSelf().
Uma*_*ari 38
服务
startService()ThreadMain ThreadstopSelf()或停止服务stopService()IntentService
Handler或完成BroadcastReceiverIntentMain ThreadSre*_*ama 15
在接受的答案中添加点数:
查看Android API中IntentService的用法.例如:
public class SimpleWakefulService extends IntentService {
public SimpleWakefulService() {
super("SimpleWakefulService");
}
@Override
protected void onHandleIntent(Intent intent) { ...}
Run Code Online (Sandbox Code Playgroud)
要为您的应用程序创建IntentService组件,请定义一个扩展IntentService的类,并在其中定义一个覆盖onHandleIntent()的方法.
另外,请参阅IntentService的源代码,它的构造函数和生命周期方法,如onStartCommand ...
@Override
public int More ...onStartCommand(Intent intent, int flags, int startId) {
onStart(intent, startId);
return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
}
Run Code Online (Sandbox Code Playgroud)
一起服务AsyncTask是有效负载不是很大的许多用例的最佳方法之一.或者只是创建一个扩展IntentSerivce的类.从Android 4.0版开始,所有网络操作都应该在后台进程中,否则应用程序编译/构建将失败.从UI中分离线程.AsyncTask类提供了从UI线程启动新任务的最简单方法之一.有关此主题的更多讨论,请参阅博客文章
来自Android开发者指南:
IntentService是服务的基类,可根据需要处理异步请求(表示为Intents).客户端通过startService(Intent)调用发送请求; 服务根据需要启动,依次使用工作线程处理每个Intent,并在工作失败时自行停止.
IntentService中使用的设计模式
:此"工作队列处理器"模式通常用于从应用程序的主线程卸载任务.存在IntentService类以简化此模式并处理机制.要使用它,请扩展IntentService并实现onHandleIntent(Intent).IntentService将接收Intents,启动工作线程,并根据需要停止服务.
所有请求都在一个工作线程上处理 - 它们可能需要多长时间(并且不会阻止应用程序的主循环),但一次只能处理一个请求.
IntentService类提供了一个简单的结构,用于在单个后台线程上运行操作.这使它能够处理长时间运行的操作,而不会影响用户界面的响应能力.此外,IntentService不受大多数用户界面生命周期事件的影响,因此它会在关闭AsyncTask的情况下继续运行.
IntentService有一些限制:
它无法直接与您的用户界面交互.要将结果放在UI中,您必须将它们发送到活动.工作请求按顺序运行.如果某个操作在IntentService中运行,并且您向其发送另一个请求,则该请求将一直等到第一个操作完成.无法中断在IntentService上运行的操作.但是,在大多数情况下
IntentService是简单后台操作的首选方式
**
排球图书馆
有一个名为volley-library的库,用于开发android网络应用程序 源代码可以在GitHub中供公众使用.
用于后台作业的最佳实践的android官方文档 :有助于更好地理解意图服务,线程,处理程序,服务.并执行网络操作
Roh*_*ngh 14
IntentService扩展了Service类,这明确意味着IntentService有意为同一目的而制作.
那么目的是什么?
`IntentService的目的是让我们的工作更容易运行后台任务,甚至不用担心
创建工作线程
逐个排队处理多个请求(Threading)
Service所以不,Service可以做任何IntentService会做的任务.如果您的要求符合上述标准,那么您不必在Service课堂上编写这些逻辑.所以不要重新发明轮子因为IntentService是发明轮子.
服务在UI线程上运行,而IntentService在单独的线程上运行
IntentService制作IntentService正常服务在UI线程上运行(默认情况下Service,任何Android组件类型都在UI线程上运行,例如Activity,BroadcastReceiver和ContentProvider).如果你需要完成一些可能需要一段时间才能完成的工作,那么你必须创建一个线程.如果有多个请求,您将不得不处理Service.
synchronization给出了一些默认实现,它为您完成这些任务.
根据开发者页面
IntentService 创建一个工作线程
IntentService创建一个工作队列,IntentService逐个向方法发送请求
onHandleIntent()调用IntentService方法stopSelf()null的方法的默认实现onBind()发送onStartCommand()请求并最终向其发送请求的默认实现IntentSte*_*ijn 12
我相信你可以通过谷歌搜索"Android IntentService vs Service"之类的东西找到大量的差异列表
每个示例的一个更重要的差异是IntentService一旦完成就会结束.
一些例子(快速编制)可能是;
IntentService:如果您想在打开应用程序时下载一堆图像.这是一次性过程,一旦下载完所有内容就可以自我清理.
服务:一种服务,它将不断用于通过Web API调用在您的应用和后端之间进行通信.即使它已完成当前任务,您仍然希望它在几分钟之后,以获得更多通信.
Say*_*san 12
IntentService在自己的线程上运行.完成后它会自动停止.更像是火和忘记.后续调用将排队.适合排队电话.IntentService如果需要,您也可以在内部旋转多个线程- 您可以使用它来实现此目的ThreadPoolExecutor.我这样说是因为很多人问我"为什么要使用,IntentService因为它不支持并行执行".
IntentService只是一个线程.你可以做任何你需要的东西 - 甚至旋转多个线程.唯一的警告是,IntentService一旦你旋转那些多线程就完成了.它不等待那些线程回来.你需要照顾这个.所以我建议ThreadPoolExecutor在这些场景中使用.
默认情况下Service,在主线程上运行.你需要旋转一个工作线程来完成你的工作.你需要service明确停止.我将它用于当你需要在后台运行东西的情况时,即使你离开你的应用程序并回到更多的无头service.
BroadcastReceivers如果需要,您可以随时与您的活动进行通信 .
IntentService是Service的扩展,用于简化需要在后台和独立线程中执行的任务的执行.
IntentService启动,创建一个线程并在线程中运行其任务.一旦完成,它就会清理一切.只有一个IntentService实例可以同时运行,多个调用都被排队.
它使用起来非常简单,非常方便用于很多用途,例如下载东西.但它有一些限制,可以让你想要使用更基本(不简单)的服务.
例如,连接到xmpp服务器并受活动约束的服务不能使用IntentService简单地完成.你最终会忽略或覆盖IntentService的东西.
Android IntentService 与服务
1.服务
2. 意向服务
从这里参考
小智 5
如果有人可以向我展示一些你可以用a做的事情的例子,
IntentService而不能用aservice和其他方式完成.
IntentService 不能用于长时间聆听,就像XMPP听众一样,它是一个单一的时间操作员,完成工作并挥手告别.
它也只有一个线程工程师,但有一个技巧,你可以无限制地使用它.
Servicea和 an的主要区别IntentService如下:
服务 :
1.AService默认运行在应用程序的主线程上。(这里没有默认的工作线程可用)。因此用户需要创建一个单独的线程并在该线程中执行所需的工作。
2.允许一次多个请求。(多线程)
意图服务:
1.现在,来到IntentService这里,默认工作线程可用于执行任何操作。请注意- 您需要实现onHandleIntent()方法,该方法接收每个启动请求的意图,您可以在其中执行后台工作。
2.但它一次只允许一个请求。
| 归档时间: |
|
| 查看次数: |
288901 次 |
| 最近记录: |