Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播

上传人:E**** 文档编号:90465848 上传时间:2019-06-12 格式:PPT 页数:52 大小:1.30MB
返回 下载 相关 举报
Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播_第1页
第1页 / 共52页
Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播_第2页
第2页 / 共52页
Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播_第3页
第3页 / 共52页
Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播_第4页
第4页 / 共52页
Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播》由会员分享,可在线阅读,更多相关《Android程序设计教程丁山电子课件第5章节Android后台服务与事件广播(52页珍藏版)》请在金锄头文库上搜索。

1、第五章 Android后台服务与事件广播,1,主要内容,5.1 Service进程服务 5.2 BroadCast Reciver广播 5.3 App Widget常驻程序,2,5.1.1 Service组件生命周期 5.1.2 Service服务,3,Android系统的Service是一种类似于Activity的组件,但Service没有用户操作界面,也不能自己启动,其主要作用是提供后台服务调用。Service不像Activity那样,当用户关闭应用界面就停止运行,Service会一直在后台运行,除非另有明确命令其停止。 通常使用Service为应用程序提供一些只需在后台运行的服务,或不需

2、要界面的功能,例如,从Internet下载文件、控制Video播放器等。 Service不是一个进程。除非特别对Service对象声明要以单独进程运行,Service对象是不会以单独的进程运行。 Service不是一个线程,Service不会脱离主线程单独运行。,5.1 Service组件,4,Service组件的生命周期要简单很多,在其整个生命周期中只继承了onCreate(),onStart(),onDestroy()三个事件回调方法,分别用于创建、启动和销毁Service。 当第一次启动Service时,先后调用了onCreate(),onStart()两个方法,当停止Service时,

3、则执行onDestroy()方法。 如果Service已经启动了,当再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。 在启动Service时,根据onStartCommand()的返回值不同,有两个附加的模式,一种模式为START_STICKY,用于显式启动和停止Service;另一种为START_NOT_STICKY或START_REDELIVER_INTENT,用于有命令需要处理时才运行的模式。,5.1.1 Service组件生命周期,5,Service的生命周期中只有三个阶段:onCreate, onStartCommand, onDes

4、troy。,5.1.1 Service组件生命周期,6,通常Service要在一个Activity中启动,调用Activity的startService(Intent)方法启动Service。 若要停止正在运行的Service,则调用Activity的stopService(Intent)方法关闭Service。 方法startService()和stopService()均继承于Activity及Service共同的父类android.content.Context。 一个服务只能创建一次,销毁一次,但可以开始多次,即onCreate()和onDestroy()方法只会被调用一次,而onSt

5、artCommand()方法可以被调用多次。,5.1.1 Service组件生命周期,7,Service的运行方式有两种,一种通过调用Context.startService()方法启动,另一种是通过调用Context.bindService()方法启动。 调用Context.startService()方法启动,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。这种方式在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但

6、会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。,5.1.1 Service组件生命周期,8,5.1.1 Service组件生命周期,使用Context.bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。这种方式启动服务时会回调onBind()方法,该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。采用Context

7、.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务之间的绑定,服务结束时会调用onDestroy()方法。在选择Service运行方式时,同一个Service可以同时混合使用,Service两种启动方式的生命周期如图5.1.1所示。,9,5.1.1 Service组件生命周期,Service的运行方式有两种,一种通过调用Context.startService()方法启动,另一种是通过调用Context.bindService()方法启动。示意图如下。,10,一般情况下,Service优先级要比Activity优先级要高,所以在系统资源紧张时,Servi

8、ce也不轻易被系统终止回收,Android系统会尽量保持拥有Service的进程运行。 由于Service运行于后台,没有与用户可交互的界面接口,一般可以认为Service是永久运行于系统后台的组件进程。 当Service正在调用onCreate(),onStartCommand()或者onDestory()方法时,用于当前Service的进程则变为前台进程以避免被系统终止; 当Service已经被启动时,拥有它的进程比用户可见的进程优先级低一些,但比不可见的进程要高,这就意味着Service同样不会被系统终止;,5.1.1 Service组件生命周期,11,5.1.1 Service组件生命

9、周期,如果Service已经被绑定,那么拥有Service的进程则拥有最高的优先级,可以认为Service是可见的; 如果Service可以使用startForeground(int, Notification)方法来将其设置为前台进程,那么系统就认为是对用户可见的,并不会在内存不足时终止此进程。,12,Service可分为两种类型,一种为本地服务(Local Service),另一种为远程服务(Remote Sercie)。 本地服务用于程序内部,通常为了实现应用程序自身中一些耗时的任务处理,比如查询升级信息。 远程服务主要用于系统内部的应用程序之间,可被其他应用程序复用,比如天气预报服务。

10、,5.1.2 Service服务,13,定义Service服务类时,必须继承Service基类,在其最小代码集中至少要复写onBind(Intent intent)方法,此方法是Service被绑定后调用的方法,方法返回相应的Service对象。 为了能完成实际的功能,Service类中一般需要复写其他的事件回调方法,例如onCreate()、onStart()、onDestroy()等。 onCreate()方法用于创建Service,在使用时可以在内部完成必要的初始化等前期服务处理。onStart()方法在Service启动时调用,例如在调用startService()启动Service后

11、,系统会调用onStart()方法,并通过Intent传递参数。 onDestroy()方法用于销毁Service,并释放所有占用的资源,销毁后的Service不能被程序可见,程序不能再继续使用,直到Service再次启动后方能为程序可见。,5.1.2 Service服务,14,当程序通过startService()和stopService()启动、关闭Service时,Service与访问者之间没有太多关系。因此无法进行通信和数据交换。 如果Service和访问者之间需要进行通信,应该调用bindService()绑定Service与访问者,通信结束之后,再调用unBindSevice()解

12、除绑定,退出Service。 绑定Service之后,Service类中的Ibinder onbind(Intent intent) 方法的返回值,将传递给在访问者类中声明的,ServiceConnection的onServiceConnected(ComponentName name,Ibinder service)方法中作参数。这样,访问者就可以通过Inbind对象,实现与Service之间的通信。,本地服务,15,本地服务,1 public class ServiceLocal extends Service 2 Override 3 public IBinder onBind(Inte

13、nt intent) 4 / TODO Auto-generated method stub 5 Toast.makeText(ServiceLocal.this, “调用了方法onBind()“, 6 Toast.LENGTH_LONG).show(); 7 return null; 9 Override 10 public void onCreate() 11 / TODO Auto-generated method stub 12 Toast.makeText(ServiceLocal.this, “调用了方法onCreate()“, 13 Toast.LENGTH_LONG).show

14、(); 14 super.onCreate(); 16 Override 17 public void onDestroy() 18 / TODO Auto-generated method stub 19 Toast.makeText(ServiceLocal.this, “调用了方法onDestroy()“, 20 Toast.LENGTH_LONG).show(); 21 super.onDestroy(); 23 Override 24 public void onStart(Intent intent, int startId) 25 / TODO Auto-generated me

15、thod stub 26 Toast.makeText(ServiceLocal.this, “调用了方法onStart()“, 27 Toast.LENGTH_LONG).show(); 28 super.onStart(intent, startId);,实现一个简单的本地service方法,16,类似于Activity的使用方法,在完成Service类后并在程序使用Service前需要注册Service,注册在AndroidManifest.xml文件中。 没有注册的Service不能被系统所见,系统无法使用非注册的Service。注册时,使用标签,其中的android:name为Ser

16、vice的类的定义名称,需要同定义的Service类名称保持一致。Service的启动方式也和Activity类似,有显式启动和隐式启动两种方式,显式启动直接传递给Intent相应的Service类,而隐式启动需要在注册Service时,提供Intent-filter的action属性,启动机制完全类似于Activity的启动机制。,本地服务,17,本地服务,注册完成后,就可以正常使用定义的Service服务,例如通过Activity测试上面定义的本地服务的启动、停止、绑定和解绑操作。,18,1 public class MainAct extends Activity 2 private String m_strActName=“com.ServiceLocal.SERVICE_LOCAL“; 3 /* Called when the activity is first created. */ 4 Override 5 public void onCreate(Bundle

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号