当前位置: 星创客 > 学习资源 > 讲师博文 > Android四大组件之Service
Android四大组件之Service 时间:2017-11-08     来源:星创客

这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。

 

1、服务的创建、启动与停止

 

         1、创建一个继承自Service的类

 

         2、重写onCreate、onStartCommand和onDestroy方法

 

         3、在AndroidManifest.xml中注册此服务(和注册activity方式一样)

 

         4、需要操作服务的时候,也是通过intent来startService和stopService

 

oncreate():在服务创建的时候被调用,而onStartCommand()不仅在服务被创建的时候调用,还会在服务已经开启的情况下再次开启服务时调用

 

onDestroy():在服务被停止的时候调用

 

2、服务与活动进行通信
	可以通过将service和activity进行绑定,来控制service的运行逻辑。
	1、MyService类中添加如下内容:
		class DownloadBinder extends Binder{	//1、创建一个继承自Binder的类,内部提供public方法(也就是需要控制的逻辑)
			public void startDownload(){
				Log.d("hahaha", "startDownload...");
			}
			public void getProgress(){
				Log.d("hahaha", "stopDownload...");
			}
		}
		private DownloadBinder mbinder = new DownloadBinder();	//2、创建此类的实例,并且由onBind返回
		@Override
		public IBinder onBind(Intent intent) {
			return mbinder;
		}
	2、MainActivity类中添加如下内容:
		private MyService.DownloadBinder downloadBinder;	//用来接收service和activity的绑定实例
		private ServiceConnection connection = new ServiceConnection() {	//创建回调实例,当服务被创建或者销毁时锁所回调的方法
			@Override
			public void onServiceDisconnected(ComponentName name) {				
			}				
			@Override
			public void onServiceConnected(ComponentName name, IBinder service) {
				downloadBinder = (MyService.DownloadBinder)service;
				downloadBinder.startDownload();
				downloadBinder.getProgress();
			}
		};
	...
		case R.id.bt2:
			Intent bindIntent = new Intent("xxxxx");	
			bindService(bindIntent, connection, BIND_AUTO_CREATE);	//将服务和回调实例相绑定,第三个参数为绑定后自动创建服务实例,
			break;													//这会使得MyService的onCreate方法得到执行,但onStartCommand不会执行
		case R.id.bt3:												//也就是说服务被创建并且回调绑定的方法之后,服务的主体还没有开始执行
			unbindService(connection);								//当startService被调用的时候服务才真正的执行
			break;

                   也就是说在服务运行的过程中,我们想让服务去执行一些特定的事情,但是在之前的学习中服务被创建运行起来之后我们就无法操控它了,所以我们可以在service中创建一个内部类,类中创建实现一些对外提供的方法(譬如startDownload和getProgress),然后将这个内部类的实例通过onBind返回。

 

         这个实例就是activity和service通信的桥梁。

 

                   接着在activity中创建与service的会话实例connection,此实例内部有两个方法:

 

                            onServiceConnected(ComponentName name, IBinder service);

 

                            //第二个参数为service里onBind返回的内部类实例,通过将service向下转型可以调用其对外提供的方法,绑定时回调

 

                            onServiceDisconnected(ComponentName name)Android;

 

                            //系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时)调用该方法。注意:当客户端取消绑定时,系统“绝对不会”调用该方法。

 

 

3、服务的生命周期

 

         当只调用了startService()时,再次调用stopService()即可调用onDestroy();

 

         当只调用了bindService()时,再次调用unbindService()即可调用onDestroy();

 

         当调用了startService和bindService时,必须先后调用stopService()和unbindService()才会回调onDestroy();

 

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

Android四大组件之Service
来源: 星创客 作者: 星创客 时间:2017-11-08

这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。 1、服务的创建、启动与停止 1、创建一个继承自Service的类 2、重写onCreate、onStartCommand和onDestroy方法 3、在AndroidManifest.xml中注...

这里我们简单讲解一下Android的四大组件之Service的使用方法及注意要点。

 

1、服务的创建、启动与停止

 

         1、创建一个继承自Service的类

 

         2、重写onCreate、onStartCommand和onDestroy方法

 

         3、在AndroidManifest.xml中注册此服务(和注册activity方式一样)

 

         4、需要操作服务的时候,也是通过intent来startService和stopService

 

oncreate():在服务创建的时候被调用,而onStartCommand()不仅在服务被创建的时候调用,还会在服务已经开启的情况下再次开启服务时调用

 

onDestroy():在服务被停止的时候调用

 

2、服务与活动进行通信
	可以通过将service和activity进行绑定,来控制service的运行逻辑。
	1、MyService类中添加如下内容:
		class DownloadBinder extends Binder{	//1、创建一个继承自Binder的类,内部提供public方法(也就是需要控制的逻辑)
			public void startDownload(){
				Log.d("hahaha", "startDownload...");
			}
			public void getProgress(){
				Log.d("hahaha", "stopDownload...");
			}
		}
		private DownloadBinder mbinder = new DownloadBinder();	//2、创建此类的实例,并且由onBind返回
		@Override
		public IBinder onBind(Intent intent) {
			return mbinder;
		}
	2、MainActivity类中添加如下内容:
		private MyService.DownloadBinder downloadBinder;	//用来接收service和activity的绑定实例
		private ServiceConnection connection = new ServiceConnection() {	//创建回调实例,当服务被创建或者销毁时锁所回调的方法
			@Override
			public void onServiceDisconnected(ComponentName name) {				
			}				
			@Override
			public void onServiceConnected(ComponentName name, IBinder service) {
				downloadBinder = (MyService.DownloadBinder)service;
				downloadBinder.startDownload();
				downloadBinder.getProgress();
			}
		};
	...
		case R.id.bt2:
			Intent bindIntent = new Intent("xxxxx");	
			bindService(bindIntent, connection, BIND_AUTO_CREATE);	//将服务和回调实例相绑定,第三个参数为绑定后自动创建服务实例,
			break;													//这会使得MyService的onCreate方法得到执行,但onStartCommand不会执行
		case R.id.bt3:												//也就是说服务被创建并且回调绑定的方法之后,服务的主体还没有开始执行
			unbindService(connection);								//当startService被调用的时候服务才真正的执行
			break;

                   也就是说在服务运行的过程中,我们想让服务去执行一些特定的事情,但是在之前的学习中服务被创建运行起来之后我们就无法操控它了,所以我们可以在service中创建一个内部类,类中创建实现一些对外提供的方法(譬如startDownload和getProgress),然后将这个内部类的实例通过onBind返回。

 

         这个实例就是activity和service通信的桥梁。

 

                   接着在activity中创建与service的会话实例connection,此实例内部有两个方法:

 

                            onServiceConnected(ComponentName name, IBinder service);

 

                            //第二个参数为service里onBind返回的内部类实例,通过将service向下转型可以调用其对外提供的方法,绑定时回调

 

                            onServiceDisconnected(ComponentName name)Android;

 

                            //系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时)调用该方法。注意:当客户端取消绑定时,系统“绝对不会”调用该方法。

 

 

3、服务的生命周期

 

         当只调用了startService()时,再次调用stopService()即可调用onDestroy();

 

         当只调用了bindService()时,再次调用unbindService()即可调用onDestroy();

 

         当调用了startService和bindService时,必须先后调用stopService()和unbindService()才会回调onDestroy();

 

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号