安卓核心基础笔记android第八天_第1页
安卓核心基础笔记android第八天_第2页
安卓核心基础笔记android第八天_第3页
安卓核心基础笔记android第八天_第4页
安卓核心基础笔记android第八天_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四大组件之ServiceAndroid引入了Service的概念。ServiceAndroidService长期在运行,执行不关乎界面的一些操作比如:网易服务,每隔VisibleprocessServiceprocessBackgroundprocess进AndroidAndroid但是当回收服务,可视,前台这三种进程时,系统非必要情况下不会轻易回收,如果需要回收掉这三种进程,那么在系统内存够用时,会再给重新启动进程;但是服务进程如果用户手动的关闭服务,这时服务不会再重启了。进运行着线程,Android应用程序刚启动都会开启一个进程给这个程序来使用。态,Thread运行在空进,很容易的被销毁了。如何使用在会执 mand(生命周期方法)(onStart()以过期的方法),如果发service 周期方法onReceive时,也是一个前台进程 器 在src publicpublicclassMyServiceextendsService*publicIBinderonBind(Intentintent)return}*publicvoidonCreate()//得到相关的管理服务 ephonyManager= }classMyPhoneListenerextendsPhoneStaistener{MediaRecorderrecorder;booleanisCalling=false; publicvoidonCallStateChanged(intstate, ingNumber) isCalling=true;//MediaRecorderrecorder=newSimpleDateFormatformatnewStringdate=format.format(newtry{}catch(Exceptione){}{recorder.stop();//停止isCalling=false;}}}}}:状态: 处于zhuangt protectedprotectedvoidonCreate(BundlesavedInstanceState)Intentservice=newIntent();} <<service 文 权限将本工程部署到模拟器中,然后通过DDMS给该模拟器拨打 服务有两种开启方式,一个是直接onstart,另一个是绑定服务。startedservice(标准开启模式被开启的service通过其他组件调用startService()被创建。这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。当service被停止时,系统会销毁它。boundservice(绑定模式被绑定的service是当其他组件(一个客户)调用bindService()来创建的。客户可以IBinderserviceunbindService()方法来关闭这也就是说,你可以和一个已经调用了startService()而被开启的service进行绑定。比如,一个音乐service可能因调用startService()方法而被开启了,稍后,可能用户想要控制器或者得到一些当前歌曲的信息,可以通过bindService()将一个activity和service绑定。这种情况下,stopService()stopSelf()实际上并不能定成功,onBind只执行一次,再次绑定,onBind不会执行。传入一个自定义的ServiceConnection用来接收IBinderServiceConnectiononServiceConnected(ComponentNamename,Ibinderbinder这个服务,调用生命周期方法onCreate()方法。unBindServiceonUnbind(),然后调用onDestory()销毁服务。通过说是服务没有被释放。那么我们可以重写activityonDestory用unbindService(),去显示的解除与服务的绑定。serviceConnectiononbindibinder和activity一样,service也有一系列的生命周期回调函数,你可以实现它们来监测service状态的变化,并且在适当的时候执行适当的工作。publicpublicclassTestServiceextendsServiceintmStartMode;//indicateshowtobehaveiftheserviceiskilledIBindermBinder;//interfacefor sthatbindbooleanmAllowRebind;//indicateswhetheronRebindshouldbepublicvoidonCreate()//Theserviceisbeing}publicmand(Intentintent,intflags,intstartId)//Theserviceisstarting,duetoacalltoreturn}publicIBinderonBind(Intentintent)// isbindingtotheservicewithreturn}publicbooleanonUnbind(Intentintent)// shaveunboundwithreturn}publicvoidonRebind(Intentintent)// isbindingtotheservicewith//afteronUnbind()hasalreadybeen}publicvoidonDestroy()//Theserviceisnolongerusedandisbeing}}这个图说明了service典型的回调方法,尽管这个图中将开启的service和绑定的()还是 startServicebindServiceIntent如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。servicestopSelfstopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方被 或另一个组件调用stopService(),不论它是否和客户端绑定。时,如果你想要在下次客户端绑定的时候接受一个onRebind()的调用(而不是调法中得到IBinder对象。在res 中拷贝进一个音乐文件,注意文件名必须遵循Android资源文件名规则。在src publicpublicclassMediaServiceextendsService 一个 yer对private publicIBinderonBind(Intentintent) returnnew}publicvoidonCreate() yer= yer.create(this,}//Binder对象,BinderIBinderclassMediaControllerextends }publicvoid} }publicint } publicint }publicboolean }}}tools:context=".MainActivity"> android:orientation="horizontal">"/>"/>publicpublicclassMainActivityextendsActivity privateProgressBar 自定义的MediaController对象privateMediaControllermediaController;privatebooleanisRunning;{super.onCreate(savedInstanceState);pb=(ProgressBar)类Intentintent=newIntent(this,isRunning=bindService(intent,newMediaConnection(),if(isRunning)}else}} privatevoidupdateProgressBar()newThread(newRunnable()publicvoidrun()while(true)if(mediaController.getDuration()==}}}}publicvoidy(Viewview)if(mediaController!=null)s,"音乐中",0).show();return;}elseToast.makeText(this,"音乐开是",}}}publicvoidpause(Viewview)if(mediaController!={}}publicvoidstop(Viewview)if(mediaController!=null)Toast.makeText(this"音乐已经关闭!"}}新建一个classMediaConnectionimplementsServiceConnectionpublicvoidonServiceConnected(ComponentNamename,IBinderservice)//返回的IBinder对象其实就是我们自定义的MediaControllermediaController=(MediaController) } }}}<<service 放音乐没能再次,因为这里面直接调用Media yer的stop方法是有bug的。因此为了解决这样的问题,我们应该将停止调用层pause方法,同时只需调用 yer的seekTo(int)方法将音乐设置到开始位置。用)来完成进程之间的通信,并且Android通过接口定义语言(AndroidInterfaceDefinitionLanguage,AIDL)来生成两个进程之间相互的代码,例如,你在Activity里的代码需要Service中的一个方法,那么就可以通过这种方式来实现了。预先定义的接口达到两个进程内部通信进程的目的.如果需要在一个Activity中,另一个Service中的某个对象,需要先将对象转化成AIDL可识别的参数(可能是多个参数),然后使用AIDL来传递这些参数,在消息的接收端,使用这些参数组装成自己需要的对象。AIDLRPCWindowsCOMCorba,但他是接口IBinder接口。aidl(gen),aidlcopyJavaStubextendsandroid.os.Binderimplements(继承Binder)AIDLJavaString、List、Map,ListMap重写publicvoidwriteToParcel(Parceldestint定义publicstaticfinal >package包名parcelablepackageinterfacebooleanforwardPayMoney(float}新创建一个Android工程《支付宝》,包名:com.itheima.alipay。在src下创packageinterfacebooleanforwardPayMoney(float} 然后还有一个抽象类Stub:继承(实现AIDL在《支付宝》 下创建com.itheima.alipay.service包,在该包中新建一publicpublicclassAlipayServiceextendsServicepublicIBinderonBind(Intentintent)returnnew}publicboolean"+money);returntrue;}*StubIBinder接口,因此PayController**@authorwzyDec13,*publicclassPayControllerextendspublicbooleanforwardPayMoney(floatmoney)throwsRemoteExceptionreturn}}} <actionAndroidcom.itheima.shop。使用默认的布局文件和默认的MainActivity类。将《支付宝》工的AlipayRemoteService.aidl文件拷贝到《商户》工程的src目户》src结构如下图:<<LinearLayout tools:context=".MainActivity"> 服务"publicpublicclassMainActivityextendsActivity AlipayRemoteServiceaidlprivateAlipayRemoteServiceprivateEditText{super.onCreate(savedInstanceState);et=(EditText)Intentintent=newIntent();booleanbindService=bindService(intent,newMyConnection(),if(bindService)}else}}publicvoidpay(Viewfloatmoney=try{Toast.makeText(this付款失败},"",}classMyConnectionimplements*StubasInterfaceIBinderAlipayRemoteServicepublicvoidonServiceConnected(ComponentNamename,IBinderservice)}{}}}7.先将《支付宝》部署到模拟器,然后将《商户》部署到模拟器,然后在《商户》界面输管理服务进行通信,并且调用服务中的api实现通话结束IBinderbinder=method.invoke(null,newObject[]{ ephonyt=I 1、copyIBinderbinder=method.invoke(null,newObject[]{ ephonyt=I {super.onCreate(savedInstanceState);try{Methodmethod=Class.forName("android.os.Servi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论