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服务按钮被按下!");
				startService(intent);
			}
		});

运行效果如下:

可以看到我们的界面没有出现卡住,(关于卡住不动,请看我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后自动停止服务,无需手动停止服务

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-17 05:38:50

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

Android 四大组件学习之Service七

本节学习Service的分类: 本地服务, 远程服务 本地服务: 指的是服务和启动服务的activity在同一个进程中 远程服务:指的是服务和启动服务的activity不在同一个进程中 我们以前使用的都是本地服务,今天我们学习远程服务.学习远程服务就必须要学习AIDL(Android Interface Definition Language)安卓接口定义语言.编译器通过AIDL文件的描述信息生成符合通信协议的JAVA代码.我们在进程间通信的时候只需要调用即可. 既然要实现远程服务,就需要一个服

Android 四大组件学习之Service六

上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中的第二个參数也就是ServiceConnection这种方法在将用bindService时好像没用到. 那本节课就学习. 那我们先说个事.上大学的时候.我学习不好,还是那种常常旷课的同学. 长期下去,老师跟前就混的不好了. 有次班里评选党员,我就想竞争一下,可是因为我常常不上课的同学,自然几率就小,

Android 四大组件学习之Service二

上节学习如何创建了一个Service,并且用Activity启动一个Service.这节我们在上节的基础上更加完善 这节学习用StartServer启动服务,并且在服务中每隔一秒打印出当前时间 举例说明: MyActivity代码: public class MyActivity extends Activity { private Button btn_start; private Button btn_end; @Override protected void onCreate(Bundle

Android 四大组件学习之Service四

本节学习Service的生命周期. 既然Activity有生命周期,那同理Service也有自己的生命周期. 和学习Activity一样,我们先贴出Google官网给Service下的定义,以及生命周期图 从图中可以看到,左面一路下来是我们第二节课中说的用StartServer启动服务的流程.右面一路下来的是第三节中说的用BindService启动服务的流程. 在上两节中都看到了如何启动服务,同时销毁服务.既然这年代是混搭的年代,那当然也需要这两种服务混搭起来使用. 先来看看MyActivity

Android 四大组件学习之Service三

上节我们学习了,如何用StartService启动服务,这节学习如何用BindService启动一个服务 首先看MyActivity的代码部分: public class MyActivity extends Activity { private Button btn_start; private Button btn_end; private MyServiceConnection sConnection; @Override protected void onCreate(Bundle sa

Android 四大组件学习之ContentProvider五

上几节学习了ContentProvider的实际用途,读取短信,插入短信,读取联系人,插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件,比如什么短信软件,此短信软件是替代了系统中自带的短信软件.当然可读取短信就是利用的ContentProvider,但是此等软件为何能实时的把接受的短信显示出来呢?  这就用到我们的内容观察者. 什么是内容观察者呢?  就是一直在观察系统是否有新短信,如果有新短信就会提示第三方软件赶快去数据库中取短信信息.这样就能实时的

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

android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个Activity通常就是一个单独的屏幕(窗口). (2)Activity之间通过Intent进行通信. (3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity. (4)Activity生命周期>什么是

Android 四大组件学习之Activity一

Activity是Android四大组件中最基础也是最常用的组件之一.Activity作为一个应用程序组件,提供了一个与用户交互的界面.可以这么说Activity是和用户操作有密切相关的的,常用来负责与用户交互,可以通过setContentView来显示组件. 今天我们学习如何去创建一个Activity 第一步: 创建一个Android Application Project, 填入应用名称,工程名称,包名 点击Next下一步:下面的选择都是默认的. 直到 你就可以选择一个Activity进行创

Android 四大组件学习之BroadcastReceiver一

本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比如在现实社会中,以前每个人家都有一台收音机,这可就可以去接受广播发出来的消息.大家都知道,程序世界也是参照的显示生活设计出来的,那在Android系统中也引入了广播这个概念.那在Android系统中广播有什么作用呢? 举个例子:比如你正在玩游戏或者看视频突然手机电量过低,这时候就会弹出一个框,提醒您手机电量过低,请充电的提示.其实电量改变就是一种广播类型,当电量过低时,系统就会发生一条广播,这时候正在运行的程序就会收