关于IntentService 用法

IntentService就是一个后台处理类,它继承了Service并且对其封装。我们可以向他发送多个请求Intent。IntentService会把所有收到的Intent请求放到队列中。逐个处理,他会为每个请求创建一个单独的工作线程。当处理完队列中所有的Intent请求后。就会终止自己。

在什么情况下使用IntentService呢?

当我们要在Android上的实现后台处理任务主要有三种实现方式:

(1)是按照常规的Java方式,自己写线程(例如Thread)

(2)使用SDK封装好的后台任务类AsyncTask

(3)使用Service。

线程和AsyncTask都是和Activity的生命周期绑定的,一旦Activity被销毁它们也随着销毁了,但Service有自己的独立生命周期。

当一项任务分成几个子任务,子任务需要按顺序先后执行。利用线程,给每一个子任务开启一个线程是可以达到这个目的的,但是每个线程必须去手动控制,而且得在一个子线程执行完后,再开启另一个子线程。或者,全部放到一个线程中让其顺序执行。这样都可以做到,但是,如果这是一个后台任务,就得放到Service里面,由于Service和Activity是同级的,所以,要执行耗时任务,就得在Service里面开子线程来执行。那么,有没有一种简单的方法来处理这个过程呢,答案就是IntentService。

例子:

public class MyIntentService extends IntentService {

    private static int num = 0;
    Handler handler = new Handler();

    /**
     * 这里需要注意一下,Eclipse默认生成的是带参数的构造函数,但是这样会引起异常的
     * java.lang.InstantiationException: can‘t instantiate class..... no empty constructor 错误
     */
    public MyIntentService() {
        super("test");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        for (int i = 1; i < 11; i++) {
            num += i;
        }
        handler.post(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MyIntentService.this, String.valueOf(num),
                        Toast.LENGTH_SHORT).show();
            }
        });
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

 在Activity中调用

btn2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送第一个Intent请求
                Intent intent = new Intent("myintentservice");
                startService(intent);

//发送第二个Intent请求
                Intent intent2 = new Intent("myintentservice");
                startService(intent2 ); } }); 

关于IntentService的java.lang.InstantiationException错误:

http://www.cnblogs.com/helloandroid/articles/2208154.html

关于IntentService 用法,布布扣,bubuko.com

时间: 2024-10-26 06:54:24

关于IntentService 用法的相关文章

IntentService使用以及源码分析

一 概述 我们知道,在Android开发中,遇到耗时的任务操作时,都是放到子线程去做,或者放到Service中去做,在Service中开一个子线程来执行耗时操作. 那么,在Service里面我们需要自己管理Service的生命周期,何时开启何时关闭,还是很麻烦的,还好Android给我们提供了一个这样的类,叫做IntentService 那么IntentService是做什么用的呢? IntentService: 是继承于Service的一个类,用来处理异步请求.可以直接通过startServi

Android:远程服务Service(含AIDL &amp; IPC讲解)

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service其中一种常见用法:远程Service 如果你对Service还未了解,建议先阅读我写的另外一篇文章: Android四大组件:Service史上最全面解析 目录 1. 远程服务与本地服务的区别 远程服务与本地服务最大的区别是:远程Service与调用者不在同一个进程里(即远程Service是运行在另外一个进程):而本地服务则是与调用者运行在同一个进程里 二者区别的详细区别如下图: 2. 使用场景 多个应用程

Android:(本地、可通信的、前台、远程)Service使用全面介绍

前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service最基础的知识:Service的生命周期 如果你对Service还未了解,建议先阅读我写的文章: Android四大组件:Service史上最全面解析 目录 1. Service分类 1.1 Service的类型 1.2 特点 2.具体使用解析 2.1 本地Service 这是最普通.最常用的后台服务Service. 2.1.1 使用步骤 步骤1:新建子类继承Service类 需重写父类的onCreate()

Android开发--IntentService的用法,你错过了什么

IntentService是Android中提供的后台服务类,我们在外部组件中通过Intent向IntentService发送请求命令,之后IntentService逐个执行命令队列里的命令,接收到首个命令时,IntentService就开始启动并开始一条后台线程执行首个命令,接着队列里的命令将会被顺序执行,最后执行完队列的所有命令后,服务也随即停止并被销毁. 与Service的不同 Service中的程序仍然运行于主线程中,而在IntentService中的程序运行在我们的异步后台线程中.在接

IntentService的用法,对比Service它会按顺序执行,不会像Service一样并发执行。

package com.lixu.intentservice; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { @Override protected void onCrea

android学习十八(Service服务的基本用法)

定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com.jack.servicetest; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { @Over

【Android】16.4 IntentService类

分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 为了进一步简化Intent过滤器的用法,Android系统又提供了一个IntentService类,这样一来,你也不需要重写其他的方法了,直接实现一个继承自IntentService的类,然后重写OnHandleIntent方法即可. IntentService类继承自Service类.这个类自动使用工作线程处理所有Service的启动请求(即:对IntentService的每次请求都会自动启动一个线程去处理它

Android 源码系列之&lt;七&gt;从源码的角度深入理解IntentService及HandlerThread

转载请注明出处:http://blog.csdn.net/llew2011/article/details/51373243 提起Service大家都很熟悉,它乃Android四(si)大(da)组(jing)件(gang)之一.但是说起IntentService有童靴或许有点陌生,看名字感觉和Service有关连.不错,不仅有关联而且关系还不一般,IntentService是Service的子类,所以它也是正宗的Service,由于IntentService借助了HandlerThread,我

service常见用法及相关知识

Service组件 身为四大组件之一的Service在程序中使用频率是比较高的,主要用来处理一些不需要UI的耗时的后台操作,或者在后台对外提供接口,供其他组件调用.Service的实现是比较典型的C/S模式,后文介绍用法时会有体会. 两种常见的Service IntentService:适合同一时间只处理一个任务,代码少,使用简单 是Service类的子类,默认会开启一个工作线程,你需要覆盖onHandleIntent方法,用来处理startService传过来的Intent,在一个生命周期内,