您好,欢迎访问三七文档
03进阶篇Android移动开发项目化教程项目十高级用户界面设计项目十一列表视图ListView项目十二自定义菜单项目十三BroadCastReceiver实现广播的接收与发送目录CONTNETS项目十四Service生命周期本章导读Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序。Service一旦被启动起来,就与Activity一样,完全具有自己的生命周期。Service与Activity的区别在于:Service一直在后台运行,它没有用户界面,所以绝不会到前台来。因此,如果某个程序组件需要在运行时向用户呈现某种界面,或者该程序需要与用户交互,就需要使用Activity,否则就应该考虑使用Service了。项目十四Service生命周期一、项目要求4项目要求了解Service是什么,有什么用途。掌握Service的生命周期,了解大体工作流程。熟悉Service的两种启动方式,学会使用Service。项目十四Service生命周期二、项目相关知识501Service简介Service是Android系统中的四大组件之一,它是一种长生命周期的、没有可视化界面、运行于后台的一种服务程序。比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当退出播放音乐的应用,如果不用Service,我们就听不到歌了。服务主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的项目,这样可以不影响用户做其他的事情。通过AIDL服务可以实现不同进程之间的通信,这也是服务的重要用途之一。项目十四Service生命周期二、项目相关知识602Service生命周期Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStartCommend(),onDestroy()三个方法,当第一次启动Service时,先后调用了onCreate()和onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会再执行onCreate()方法,而是直接执行onStart()方法。项目十四Service生命周期二、项目相关知识7Android下的Service生命周期分为未绑定Activity的service和绑定了Activity的service。两种不同service服务的生命周期图示如图14-1所示。图14-1service生命周期示意图项目十四Service生命周期二、项目相关知识8未绑定Activity的Service必须通过startService()方法启动,生命周期依次包含了创建onCreate(),开始onStartCommand(),销毁onDestory()三个方法。其中创建方法onCreate()和销毁方法onDestory()只被调用一次,开始方法onStartCommand()方法可以被调用多次。绑定了Activity的Service通过bindService()方法启动,生命周期包括创建onCreate()、绑定onBind()、解绑onUnbind()和销毁onDestory()四个方法。其中创建和销毁、绑定和解绑方法是对应的,都只执行一次。项目十四Service生命周期二、项目相关知识9什么是AIDL?AIDL全称是AndroidInterfaceDefinitionLanguage,这是一种接口定义语言,采用远程过程调用(RemoteProcedureCall,RPC)方式实现。这些服务可以被其他应用程序访问。建立AIDL服务分为以下几个步骤:(1)在Android工程的Java源目录中建立一个扩展名为aidl的文件。(2)建立aidl文件的内容正确,ADT会自动生成一个Java接口文件(*.Java)。(3)建立一个服务类(Service子类)。(4)实现由aidl文件生成的Java接口。(5)在AndroidManifest.xml文件中配置AIDL服务,action标签中android:name的属性值就是客户端要引用的该服务的ID,也就是Intent类构造方法的参数值。03跨进程服务简介项目十四Service生命周期三、项目实施过程10项目十四Service生命周期工程创建01参考前面实验中创建“Helloworld”工程的步骤创建一个工程(如AndroidCode14),工程目录结构,如图14-2所示。图14-2工程目录结构图三、项目实施过程11XML布局文件的开发02界面采用相对布局管理器(垂直),里面再包含一个表格布局(水平),这个表格布局里包含四个Button(分别是启动服务、停止服务、绑定服务、解绑服务),表格布局下面是一个Button(退出程序),界面如图14-3所示。1图14-3界面设置项目十四Service生命周期三、项目实施过程12界面设计完整代码。(见书中详细代码)2按【Ctrl+S】组合键保存后退出,至此界面文件就编写完成了。3项目十四Service生命周期三、项目实施过程13Java文件的开发03在MainActivity中定义开启服务、停止服务、绑定服务、解绑服务和退出5个Button按钮并初始化。初始化控件对象,使程序运行时候的控件显示和XML文件中绘制好的控件关联起来,对控件的操作就是对图形化界面上按钮的操作:1项目十四Service生命周期程序由三个类文件组成:MainActivity(主界面),MyBroadcastReceiver(广播类)和MyService(服务类)。广播类用户接收程序发送的信息并处理相关操作。ButtonbtnStartService,btnStopService,btnBindService,btnUnbindService,btnExit;三、项目实施过程14项目十四Service生命周期给5个Button按钮设定监听器,单击按钮时触发监听器,对应不同按钮监听器做出不同的响应。btnStartService=(Button)findViewById(R.id.btn_start_service);btnStopService=(Button)findViewById(R.id.btn_stop_service);btnBindService=(Button)findViewById(R.id.btn_bind_service);btnUnbindService=(Button)findViewById(R.id.btn_unbind_service);btnExit=(Button)findViewById(R.id.btn_exit);三、项目实施过程15项目十四Service生命周期对应五个按钮的intent服务,分别对应启动服务、停止服务、绑定服务和解绑服务。publicvoidonClick(Viewv){Intentintent=newIntent();intent.setClass(context,MyService.class);switch(v.getId()){//启动服务caseR.id.btn_start_service:context.startService(intent);break;//停止服务caseR.id.btn_stop_service:context.stopService(intent);break;三、项目实施过程16项目十四Service生命周期//绑定服务caseR.id.btn_bind_service:context.bindService(intent,serviceConnection,BIND_AUTO_CREATE);break;//解绑服务caseR.id.btn_unbind_service:context.unbindService(serviceConnection);break;caseR.id.btn_exit:unregisterReceiver(receiver);finish();break;default:break;}}三、项目实施过程17项目十四Service生命周期publicvoidonReceive(Contextcontext,Intentintent){//TODOAuto-generatedmethodstubStringaction=intent.getAction();if(action.equals(update)){Stringtime=intent.getExtras().getString(time);System.out.println(time);System.out.println(===+mContext);}}在MyBroadcastReceiver类中重写onReceive方法,该方法用于接收update更新的广播信息,当程序收到内容为“update”的action时输出当前时间:2三、项目实施过程18项目十四Service生命周期publicvoidonCreate(){Log.i(TAG,启动服务);Toast.makeText(mContext,启动服务,Toast.LENGTH_SHORT).show();//开启计数newThread(newRunnable(){@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubwhile(!flag){try{在MyService类中的关键代码说明:Service类里的代码就是单击不同Button按钮时所触发的相应操作,此服务在后台运行。在MyService类中编写代码,实现开启服务,关闭服务,绑定服务,解绑服务的方法。新建一个Thread线程每隔一秒钟输出当前的精确时间,并用intent传递数据给接收器使用。3三、项目实施过程19项目十四Service生命周期Thread.sleep(1000);Log.i(TAG,nowtime===+getSystemTime());//发送消息Stringstr=currenttime:+getSystemTime();intent=newIntent();intent.setAction(update);intent.putExtra(time,str);mContext.sendBroadcast(intent);}catch(Exceptione){//TODO:handleexception}}}}).start();super.onCreate();}三、项目实施过程20项目十四Service生命周期在onDestory()方法中新建一个Thread线程暂停1s,然后打印输出“服务停止”:@OverridepublicvoidonDestroy(){flag=true;try{Thread.sleep(1000);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}Log.i(TAG,停止服务);Toast.makeText(mContext,停止服务,Toast.LENGTH_SHORT).show();super.onDestroy();}三、项目实施过程21项目十四Service生命周期在onStartCommand方法中输出开始的命令,在log输出结果中可以看到当程序结束时候,不管是否已经关闭服务,服务都会被终止。publicintonStartCommand(Intentintent,intflags,intstartId){Log.i(TAG,onStartCommand()...);returnsuper.onStartCommand(intent,flags,startId);}三、项目实施过程22项目十
本文标题:汇编医院应急预案
链接地址:https://www.777doc.com/doc-751011 .html