我正在寻找一个可以用IntentService完成但不能用Service完成的示例(反之亦然)?

我还认为IntentService在不同的线程中运行,而Service则不运行。因此,就我所见,在自己的线程中启动服务就像启动IntentService一样。这是正确的吗?


当前回答

如果有人能给我举一个例子,说明你可以用IntentService完成,但不能用服务完成,反之亦然。

IntentService不能用于长时间侦听,就像XMPP侦听器一样,它是一个单时间操作员,完成任务并挥手告别。

此外,它只有一个线程线程,但通过一个技巧,您可以无限使用它。

其他回答

我相信你只需在谷歌上搜索诸如“Android IntentService vs Service”之类的内容,就能找到一系列不同之处

每个示例中一个更重要的区别是IntentService在完成后会自动结束。

一些例子(很快编好)可能是:;

IntentService:如果你想在打开应用程序时下载一堆图片。这是一个一次性的过程,一旦下载完所有内容,就可以自行清理。

服务:一种服务,它将不断用于通过web API调用在应用程序和后端之间进行通信。即使它完成了当前任务,您仍然希望它在几分钟后出现,以便进行更多的交流。

为接受的答案加分:

请参阅Android API中IntentService的用法。如:

public class SimpleWakefulService extends IntentService {
    public SimpleWakefulService() {
        super("SimpleWakefulService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {  ...}

要为应用程序创建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;
    }

对许多人来说,将AsyncTask服务在一起是最好的方法之一有效负载不是很大的用例。或者创建一个类延伸IntentDrive。从Android 4.0版所有网络操作应该在后台进行,否则应用程序编译/构建失败。将线程与UI分离。AsyncTask类提供了从UI线程启动新任务的最简单方法之一。有关此主题的更多讨论,请参阅博客文章

来自Android开发者指南:

IntentService是按需处理异步请求(表示为Intents)的服务的基类。客户端通过startService(Intent)调用发送请求;该服务根据需要启动,依次使用工作线程处理每个Intent,并在其耗尽工作时自行停止。

IntentService中使用的设计模式

:这种“工作队列处理器”模式通常用于从应用程序的主线程卸载任务。IntentService类的存在是为了简化此模式并处理机制。要使用它,请扩展IntentService并实现onHandleIntent(Intent)。IntentService将接收Intent,启动一个工作线程,并根据需要停止服务。

所有请求都在一个工作线程上处理——它们可能需要尽可能长的时间(并且不会阻塞应用程序的主循环),但一次只能处理一个请求。

IntentService类为在单个后台线程上运行操作提供了一种简单的结构。这允许它处理长时间运行的操作,而不会影响用户界面的响应能力。此外,IntentService不受大多数用户界面生命周期事件的影响,因此它会在关闭AsyncTask的情况下继续运行。

IntentService有几个限制:

它不能直接与用户界面交互。要将其结果放在UI中,必须将其发送到“活动”。工作请求按顺序运行。如果一个操作正在IntentService中运行,并且您向它发送了另一个请求,则该请求将等待第一个操作完成。无法中断IntentService上运行的操作。然而,在大多数情况下

IntentService是简单后台操作的首选方式

**

沃尔利图书馆

有一个名为volleylibrary的库,用于开发android网络应用程序源代码可在GitHub中向公众提供。

后台作业最佳实践的android官方文档:帮助更好地理解intent服务、线程、处理程序和服务。以及执行网络操作

Android IntentService与服务

1.服务

使用startService()调用服务。可以从任何线程调用服务。服务在默认应用程序。因此,它可以阻止应用程序的UI。多次调用服务将创建多个实例。需要使用stopSelf()或stopService()停止服务。Android服务可以运行并行操作。

2.意向服务

IntentService是使用Intent调用的。IntentService只能从Main线程调用。IntentService创建一个单独的工作线程来运行后台操作。多次调用IntentService不会创建多个实例。IntentService在队列完成后自动停止。不需要触发stopService()或stopSelf()。在IntentService中,多个intent调用自动排队并且它们将被顺序地执行。IntentService不能像Service一样运行并行操作。

请参阅此处

服务

通过startService()调用从任何线程触发在主线程上运行可能会阻塞主(UI)线程。对于长任务,始终在服务中使用线程任务完成后,我们有责任通过调用stopSelf()或stopService()来停止服务

Intent服务

它执行长任务,通常不与主线程通信,如果需要通信,则由处理器或BroadcastReceiver完成通过Intent调用从主线程触发在单独的线程上运行无法并行运行任务,并且多个意图在同一工作线程上排队。

如果有人能给我举一个例子,说明你可以用IntentService完成,但不能用服务完成,反之亦然。

IntentService不能用于长时间侦听,就像XMPP侦听器一样,它是一个单时间操作员,完成任务并挥手告别。

此外,它只有一个线程线程,但通过一个技巧,您可以无限使用它。