安卓核心基礎(chǔ)筆記android第八天_第1頁(yè)
安卓核心基礎(chǔ)筆記android第八天_第2頁(yè)
安卓核心基礎(chǔ)筆記android第八天_第3頁(yè)
安卓核心基礎(chǔ)筆記android第八天_第4頁(yè)
安卓核心基礎(chǔ)筆記android第八天_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

四大組件之ServiceAndroid引入了Service的概念。ServiceAndroidService長(zhǎng)期在運(yùn)行,執(zhí)行不關(guān)乎界面的一些操作比如:網(wǎng)易服務(wù),每隔VisibleprocessServiceprocessBackgroundprocess進(jìn)AndroidAndroid但是當(dāng)回收服務(wù),可視,前臺(tái)這三種進(jìn)程時(shí),系統(tǒng)非必要情況下不會(huì)輕易回收,如果需要回收掉這三種進(jìn)程,那么在系統(tǒng)內(nèi)存夠用時(shí),會(huì)再給重新啟動(dòng)進(jìn)程;但是服務(wù)進(jìn)程如果用戶(hù)手動(dòng)的關(guān)閉服務(wù),這時(shí)服務(wù)不會(huì)再重啟了。進(jìn)運(yùn)行著線(xiàn)程,Android應(yīng)用程序剛啟動(dòng)都會(huì)開(kāi)啟一個(gè)進(jìn)程給這個(gè)程序來(lái)使用。態(tài),Thread運(yùn)行在空進(jìn),很容易的被銷(xiāo)毀了。如何使用在會(huì)執(zhí) mand(生命周期方法)(onStart()以過(guò)期的方法),如果發(fā)service 周期方法onReceive時(shí),也是一個(gè)前臺(tái)進(jìn)程 器 在src publicpublicclassMyServiceextendsService*publicIBinderonBind(Intentintent)return}*publicvoidonCreate()//得到相關(guān)的管理服務(wù) ephonyManager= }classMyPhoneListenerextendsPhoneStaistener{MediaRecorderrecorder;booleanisCalling=false; publicvoidonCallStateChanged(intstate, ingNumber) isCalling=true;//MediaRecorderrecorder=newSimpleDateFormatformatnewStringdate=format.format(newtry{}catch(Exceptione){}{recorder.stop();//停止isCalling=false;}}}}}:狀態(tài): 處于zhuangt protectedprotectedvoidonCreate(BundlesavedInstanceState)Intentservice=newIntent();} <<service 文 權(quán)限將本工程部署到模擬器中,然后通過(guò)DDMS給該模擬器撥打 服務(wù)有兩種開(kāi)啟方式,一個(gè)是直接onstart,另一個(gè)是綁定服務(wù)。startedservice(標(biāo)準(zhǔn)開(kāi)啟模式被開(kāi)啟的service通過(guò)其他組件調(diào)用startService()被創(chuàng)建。這種service可以無(wú)限地運(yùn)行下去,必須調(diào)用stopSelf()方法或者其他組件調(diào)用stopService()方法來(lái)停止它。當(dāng)service被停止時(shí),系統(tǒng)會(huì)銷(xiāo)毀它。boundservice(綁定模式被綁定的service是當(dāng)其他組件(一個(gè)客戶(hù))調(diào)用bindService()來(lái)創(chuàng)建的??蛻?hù)可以IBinderserviceunbindService()方法來(lái)關(guān)閉這也就是說(shuō),你可以和一個(gè)已經(jīng)調(diào)用了startService()而被開(kāi)啟的service進(jìn)行綁定。比如,一個(gè)音樂(lè)service可能因調(diào)用startService()方法而被開(kāi)啟了,稍后,可能用戶(hù)想要控制器或者得到一些當(dāng)前歌曲的信息,可以通過(guò)bindService()將一個(gè)activity和service綁定。這種情況下,stopService()stopSelf()實(shí)際上并不能定成功,onBind只執(zhí)行一次,再次綁定,onBind不會(huì)執(zhí)行。傳入一個(gè)自定義的ServiceConnection用來(lái)接收IBinderServiceConnectiononServiceConnected(ComponentNamename,Ibinderbinder這個(gè)服務(wù),調(diào)用生命周期方法onCreate()方法。unBindServiceonUnbind(),然后調(diào)用onDestory()銷(xiāo)毀服務(wù)。通過(guò)說(shuō)是服務(wù)沒(méi)有被釋放。那么我們可以重寫(xiě)activityonDestory用unbindService(),去顯示的解除與服務(wù)的綁定。serviceConnectiononbindibinder和activity一樣,service也有一系列的生命周期回調(diào)函數(shù),你可以實(shí)現(xiàn)它們來(lái)監(jiān)測(cè)service狀態(tài)的變化,并且在適當(dāng)?shù)臅r(shí)候執(zhí)行適當(dāng)?shù)墓ぷ鳌ublicpublicclassTestServiceextendsServiceintmStartMode;//indicateshowtobehaveiftheserviceiskilledIBindermBinder;//interfacefor sthatbindbooleanmAllowRebind;//indicateswhetheronRebindshouldbepublicvoidonCreate()//Theserviceisbeing}publicmand(Intentintent,intflags,intstartId)//Theserviceisstarting,duetoacalltoreturn}publicIBinderonBind(Intentintent)// isbindingtotheservicewithreturn}publicbooleanonUnbind(Intentintent)// shaveunboundwithreturn}publicvoidonRebind(Intentintent)// isbindingtotheservicewith//afteronUnbind()hasalreadybeen}publicvoidonDestroy()//Theserviceisnolongerusedandisbeing}}這個(gè)圖說(shuō)明了service典型的回調(diào)方法,盡管這個(gè)圖中將開(kāi)啟的service和綁定的()還是 startServicebindServiceIntent如果service是被開(kāi)啟的,那么它的活動(dòng)生命周期和整個(gè)生命周期一同結(jié)束。servicestopSelfstopService()來(lái)停止的,沒(méi)有一個(gè)對(duì)應(yīng)的回調(diào)函數(shù)與之對(duì)應(yīng),即沒(méi)有onStop()回調(diào)方法。所以,當(dāng)調(diào)用了停止的方法,除非這個(gè)service和客戶(hù)組件綁定,否則系統(tǒng)將會(huì)直接銷(xiāo)毀它,onDestory()方被 或另一個(gè)組件調(diào)用stopService(),不論它是否和客戶(hù)端綁定。時(shí),如果你想要在下次客戶(hù)端綁定的時(shí)候接受一個(gè)onRebind()的調(diào)用(而不是調(diào)法中得到IBinder對(duì)象。在res 中拷貝進(jìn)一個(gè)音樂(lè)文件,注意文件名必須遵循Android資源文件名規(guī)則。在src publicpublicclassMediaServiceextendsService 一個(gè) yer對(duì)private publicIBinderonBind(Intentintent) returnnew}publicvoidonCreate() yer= yer.create(this,}//Binder對(duì)象,BinderIBinderclassMediaControllerextends }publicvoid} }publicint } publicint }publicboolean }}}tools:context=".MainActivity"> android:orientation="horizontal">"/>"/>publicpublicclassMainActivityextendsActivity privateProgressBar 自定義的MediaController對(duì)象privateMediaControllermediaController;privatebooleanisRunning;{super.onCreate(savedInstanceState);pb=(ProgressBar)類(lèi)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,"音樂(lè)中",0).show();return;}elseToast.makeText(this,"音樂(lè)開(kāi)是",}}}publicvoidpause(Viewview)if(mediaController!={}}publicvoidstop(Viewview)if(mediaController!=null)Toast.makeText(this"音樂(lè)已經(jīng)關(guān)閉!"}}新建一個(gè)classMediaConnectionimplementsServiceConnectionpublicvoidonServiceConnected(ComponentNamename,IBinderservice)//返回的IBinder對(duì)象其實(shí)就是我們自定義的MediaControllermediaController=(MediaController) } }}}<<service 放音樂(lè)沒(méi)能再次,因?yàn)檫@里面直接調(diào)用Media yer的stop方法是有bug的。因此為了解決這樣的問(wèn)題,我們應(yīng)該將停止調(diào)用層pause方法,同時(shí)只需調(diào)用 yer的seekTo(int)方法將音樂(lè)設(shè)置到開(kāi)始位置。用)來(lái)完成進(jìn)程之間的通信,并且Android通過(guò)接口定義語(yǔ)言(AndroidInterfaceDefinitionLanguage,AIDL)來(lái)生成兩個(gè)進(jìn)程之間相互的代碼,例如,你在Activity里的代碼需要Service中的一個(gè)方法,那么就可以通過(guò)這種方式來(lái)實(shí)現(xiàn)了。預(yù)先定義的接口達(dá)到兩個(gè)進(jìn)程內(nèi)部通信進(jìn)程的目的.如果需要在一個(gè)Activity中,另一個(gè)Service中的某個(gè)對(duì)象,需要先將對(duì)象轉(zhuǎn)化成AIDL可識(shí)別的參數(shù)(可能是多個(gè)參數(shù)),然后使用AIDL來(lái)傳遞這些參數(shù),在消息的接收端,使用這些參數(shù)組裝成自己需要的對(duì)象。AIDLRPCWindowsCOMCorba,但他是接口IBinder接口。aidl(gen),aidlcopyJavaStubextendsandroid.os.Binderimplements(繼承Binder)AIDLJavaString、List、Map,ListMap重寫(xiě)publicvoidwriteToParcel(Parceldestint定義publicstaticfinal >package包名parcelablepackageinterfacebooleanforwardPayMoney(float}新創(chuàng)建一個(gè)Android工程《支付寶》,包名:com.itheima.alipay。在src下創(chuàng)packageinterfacebooleanforwardPayMoney(float} 然后還有一個(gè)抽象類(lèi)Stub:繼承(實(shí)現(xiàn)AIDL在《支付寶》 下創(chuàng)建com.itheima.alipay.service包,在該包中新建一publicpublicclassAlipayServiceextendsServicepublicIBinderonBind(Intentintent)returnnew}publicboolean"+money);returntrue;}*StubIBinder接口,因此PayController**@authorwzyDec13,*publicclassPayControllerextendspublicbooleanforwardPayMoney(floatmoney)throwsRemoteExceptionreturn}}} <actionAndroidcom.itheima.shop。使用默認(rèn)的布局文件和默認(rèn)的MainActivity類(lèi)。將《支付寶》工的AlipayRemoteService.aidl文件拷貝到《商戶(hù)》工程的src目戶(hù)》src結(jié)構(gòu)如下圖:<<LinearLayout tools:context=".MainActivity"> 服務(wù)"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.先將《支付寶》部署到模擬器,然后將《商戶(hù)》部署到模擬器,然后在《商戶(hù)》界面輸管理服務(wù)進(jìn)行通信,并且調(diào)用服務(wù)中的api實(shí)現(xiàn)通話(huà)結(jié)束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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論