Android 四大组件学习之Service五
本节学习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五的更多相关文章
- Android 四大组件学习之Service六
上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中 ...
- Android 四大组件学习之ContentProvider五
上几节学习了ContentProvider的实际用途,读取短信.插入短信,读取联系人.插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件.比方什么短信软件.此 ...
- Android 四大组件学习之Server一
上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...
- 入职小白随笔之Android四大组件——服务(Service)
Service Android多线程编程 当我们在程序中执行一些耗时操作时,比如发起一条网络请求,考虑到网速等原因,服务器未必会立刻响应我们的请求,此时我们就需要将这些操作放在子线程中去运行,以防止主 ...
- android四大组件学习总结以及各个组件示例(1)
android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...
- Android四大组件初识之Service
Service作为Android四大组件之一,可以与Activity建立双向连接(绑定模式),提供数据和功能.也能够接收Intent单方面请求(调用模式),进行数据处理和调度功能. Service与A ...
- [Android四大组件之二]——Service
Service是Android中四大组件之一,在Android开发中起到非常重要的作用,它运行在后台,不与用户进行交互. 1.Service的继承关系: java.lang.Object → andr ...
- Android 四大组件学习之BroadcastReceiver一
本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...
- Android 四大组件之二(Service)
service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务 ...
随机推荐
- Maven实战读书笔记(四):Maven生命周期与插件
Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成 ...
- 企业支付宝账号开发接口教程--JAVA-UTF-8(实际操作完善中...SpringMVC+JSP)
关于即时到账的开发.审核通过.简单测试如下. 希望看的可以收藏或者赞一下哦. 1:拥有自己的支付宝企业账号.去产品商店选择适合自己的方案.并签约合同. 2:选择合适的商家收款产品并去签约.填写相应的信 ...
- Spring框架针对dao层的jdbcTemplate操作之jdbc数据库连接原始操作方法 所需安装包下载
crud指数据库或者持久层的基本操作,包括 增加(Create).读取查询(Retrieve 取回).更新(Update)和删除(Delete) Spring不仅对JDBC进行了封装,也对Hibern ...
- 【2018 CCPC网络赛】1003 - 费马小定理
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6440 这题主要是理解题意: 题意:定义一个加法和乘法,使得 (m+n)p = mp+np; 其中给定 ...
- CF716E Digit Tree 点分治
题意: 给出一个树,每条边上写了一个数字,给出一个P,求有多少条路径按顺序读出的数字可以被P整除.保证P与10互质. 分析: 统计满足限制的路径,我们首先就想到了点分治. 随后我们就需要考量,我们是否 ...
- Python简介--备份
脚本开头指定解释器路径 /usr/bin/env python 和 /usr/bin/python比较.(Linux在PATH中找到第一个路径的Python版本来执行) PATH中第一个路径是 ...
- JavaScript中函数的定义
JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...
- LeetCode(26) Remove Duplicates from Sorted Array
题目 Given a sorted array, remove the duplicates in place such that each element appear only once and ...
- Java学习之for循环打印菱形练习
for循环语句是Java程序设计中非常有用的循环语句.一个for循环可以用来重复执行某条语句,直到某个条件得到满足.在Java 5新增的加强的foreach语法,也非常有用. 1. for语句 for ...
- 如何取SQL结果集的第一条记录
在SQL Server数据库中,使用top关键字: SELECT TOP number|percent column_name(s) FROM table_name 在MySQL数据库中,使用LIMI ...