本节学习IntentService, 可能就有人问了。 什么是IntentService, IntentService有什么作用? 不是已经有了Service,那为什么还要引入IntentService呢?

带着这两个问题,我们先来看一个样例:

我们新建一个MyIntentService样例:

public class MyIntentService extends IntentService {

	private int count = 5;
public MyIntentService() {
super("MyIntentService");
// TODO Auto-generated constructor stub
} @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onBind------------");
return super.onBind(intent);
} @Override
public void onCreate() {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onCreate------------");
super.onCreate();
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onDestroy------------");
super.onDestroy();
} @Override
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onStart------------");
super.onStart(intent, startId);
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i("MyIntentService", "onStartCommand------------");
return super.onStartCommand(intent, flags, startId);
} @Override
protected void onHandleIntent(Intent arg0) {
// TODO Auto-generated method stub while(count > 0)
{
//设置时间的输出方式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = format.format(new Date()); //显示时间
Log.i("MyService", time); try {
//延迟一秒
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} count--;
}
} }

当中IntentService是Service的子类。须要继承与Service。

在MyActivity中添加一个button。用于启动MyIntentService

		btn_intent.setOnClickListener(new OnClickListener() {

			@Override
public void onClick(View arg0) {
// 启动服务
Intent intent = new Intent(MyActivity.this, MyIntentService.class);
Log.i("MyActivity", "启动Intent服务button被按下!");
startService(intent);
}
});

执行效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

能够看到我们的界面没有出现卡住,(关于卡住不动。请看我Service二那节)。

同一时候打印5次后,自己主动destory。

既然现象已经看了,我总结一下:

Service与IntentService之间的差别

在这之前,须要知道Service的不足之处

a: Service不是专门的一条新的线程。因此不应该在Service中处理相当耗时的任务

b:service也不会专门的启动一个新的线程,Service与它所在的应用位于同一个进程中的。

所以,对于Service的2个缺陷,就引入了IntentService。

a:IntentService会使用一个队列来关联Intent的请求,每当Activity请求启动IntentService时,IntentService会将该请求增加一个队列。然后开启一个新的线程去处理请求。所以IntentService不会把主线程卡死

b:IntentService会创建单独的线程处理onHandleIntent()方法里的实现代码

c:同一时候IntentService不用重写onBind, OnStartCommand方法,仅仅需实现onHandleIntent()方法

d:当所以的请求处理完后,Intent后自己主动停止服务,无需手动停止服务

Android 四大组件学习之Service五的更多相关文章

  1. Android 四大组件学习之Service六

    上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中 ...

  2. Android 四大组件学习之ContentProvider五

    上几节学习了ContentProvider的实际用途,读取短信.插入短信,读取联系人.插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件.比方什么短信软件.此 ...

  3. Android 四大组件学习之Server一

    上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...

  4. 入职小白随笔之Android四大组件——服务(Service)

    Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...

  5. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  6. Android四大组件初识之Service

    Service作为Android四大组件之一,可以与Activity建立双向连接(绑定模式),提供数据和功能.也能够接收Intent单方面请求(调用模式),进行数据处理和调度功能. Service与A ...

  7. [Android四大组件之二]——Service

    Service是Android中四大组件之一,在Android开发中起到非常重要的作用,它运行在后台,不与用户进行交互. 1.Service的继承关系: java.lang.Object → andr ...

  8. Android 四大组件学习之BroadcastReceiver一

    本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...

  9. Android 四大组件之二(Service)

    service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...

随机推荐

  1. Activiti6简明教程

    一.为什么选择Activiti 工作流引擎对比 二.核心7大接口.28张表 7大接口 (一)7大接口 RepositoryService:提供一系列管理流程部署和流程定义的API. RuntimeSe ...

  2. ping ip

    def ip_and_time(): """ get ip to ping from ip.txt then return two list , each ip that ...

  3. grep取缩写|awk两个文件取交集

    #!/bin/sh les species_latinName_abbr.txt|grep -E 'Aptenodytes|Gavia|Phoenicopterus|Chlamydotis|Phaet ...

  4. node如何导出数据成为excel格式

    node的应用方式,导出数据 首先,你要把数据库连接上,把你要导的数据表写出来 安装模块 $ npm install sequelize $ npm install mysql $ npm insta ...

  5. Openjudge-2815-城堡问题

    对于这道题目来说的话,我们的思路是这样的,我们首先把数据读进来,然后把color数组清零. 我们的思路是这样的的,给每一个房间设置一个对应的color数组,然后color数组里面填满不同的数字,每一种 ...

  6. [LOJ] 分块九题 2

    https://loj.ac/problem/6278 区间修改,查询区间第k大. 块内有序(另存),块内二分. 还是用vector吧,数组拷贝排序,下标搞不来.. //Stay foolish,st ...

  7. redis:安装配置主从

    1.安装依赖包 yum install gcc gcc-c++ -y 2.下载安装包,解压 cd /usr/local/src/wget http://download.redis.io/releas ...

  8. 分享一款非常好用的Fatkun图片批量下载工具

    Fatkun图片批量下载 相信大家一定遇到过有着大量精美图片的网页,譬如美女照片.各种壁纸.设计素材.甚至是1024套图等等,但常常几十上百张的图要一张张手工去点击下载实在能让人抓狂!小编的工作中也常 ...

  9. python基础知识08-类定义、属性、初始化和析构

    1.类的定义 class 类 是独立存放变量(属性/方法)的一个空间. 每个实例都是一个独立的变量空间.不同实例之间的空间互相不可见. 一个实例的特征,就是属性. 定义在类中的私有属性也可以被子类继承 ...

  10. 记第一次面试的悲惨经历QAQ

    面试岗位:测试开发 自我介绍 :根据介绍的内容,会问简历上涉及到的东西,主要是项目: 手写代码:给一个数组,求数组中所有数字拼接后能得到的最小数字.例:{3,32,312},输出312323. 关于计 ...