![2015武大-終端第一天下午7service_第1頁(yè)](http://file4.renrendoc.com/view/2c31fd51a6b1726ace29b8a6d356fdca/2c31fd51a6b1726ace29b8a6d356fdca1.gif)
![2015武大-終端第一天下午7service_第2頁(yè)](http://file4.renrendoc.com/view/2c31fd51a6b1726ace29b8a6d356fdca/2c31fd51a6b1726ace29b8a6d356fdca2.gif)
![2015武大-終端第一天下午7service_第3頁(yè)](http://file4.renrendoc.com/view/2c31fd51a6b1726ace29b8a6d356fdca/2c31fd51a6b1726ace29b8a6d356fdca3.gif)
![2015武大-終端第一天下午7service_第4頁(yè)](http://file4.renrendoc.com/view/2c31fd51a6b1726ace29b8a6d356fdca/2c31fd51a6b1726ace29b8a6d356fdca4.gif)
![2015武大-終端第一天下午7service_第5頁(yè)](http://file4.renrendoc.com/view/2c31fd51a6b1726ace29b8a6d356fdca/2c31fd51a6b1726ace29b8a6d356fdca5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
移動(dòng)平臺(tái)軟件設(shè)計(jì)7
Service7.1什么是Service7.2Service類型7.3本地服務(wù)示例7.1什么是ServiceService是Android系統(tǒng)四大組件之一,它是一種長(zhǎng)生命周期的,沒(méi)有可視化界面,運(yùn)行于后臺(tái)的一種服務(wù)程序。比如播放音樂(lè)的時(shí)候,有可能想邊聽(tīng)音樂(lè)邊干些其他事情,當(dāng)退出播放音樂(lè)的應(yīng)用,如果不用Service,我們就聽(tīng)不到歌了,所以這時(shí)候得用到Service?!痉祷亍?.2Service類型(1)本地服務(wù):用于應(yīng)用程序內(nèi)部(同一個(gè)apk內(nèi)被調(diào)用)服務(wù)可以調(diào)用startService()啟動(dòng),調(diào)用stopService()結(jié)束。在服務(wù)內(nèi)部可以調(diào)用Service.stopSelf()或Service.stopSelfResult()來(lái)自己停止。無(wú)論調(diào)用了多少次startService(),都只需調(diào)用一次stopService()來(lái)停止。Service類型(2)遠(yuǎn)程服務(wù):用于應(yīng)用程序之間(被另一個(gè)apk調(diào)用)定義服務(wù)接口并把接口暴露出來(lái),以便其他應(yīng)用進(jìn)行操作,比如一個(gè)天氣預(yù)報(bào)服務(wù)??蛻舳私⒌椒?wù)對(duì)象的連接,并通過(guò)那個(gè)連接來(lái)調(diào)用服務(wù)。通過(guò)調(diào)用bindService()方法建立連接并啟動(dòng)服務(wù),調(diào)用unbindService()關(guān)閉連接。多個(gè)客戶端可以綁定至同一個(gè)服務(wù)。如果服務(wù)此時(shí)還沒(méi)有加載,bindService()會(huì)先加載它。遠(yuǎn)程服務(wù)提供給可被其他應(yīng)用復(fù)用。Service生命周期【返回】stopService()或stopSelf()7.3本地服務(wù)示例--音樂(lè)播放服務(wù)主要步驟:1.準(zhǔn)備工作2.創(chuàng)建MusicService3.主程序4.功能改進(jìn)1.準(zhǔn)備工作在res文件夾下新建raw文件夾將音樂(lè)文件import到raw文件夾中備注:res/raw文件夾通常存放資源文件,如音頻、視頻等資源res/raw中的文件會(huì)被映射到R.java文件中,訪問(wèn)的時(shí)候直接使用資源ID,即R.raw.某個(gè)資源id;【返回】文件名不要出現(xiàn)中文和空格,也不要以全數(shù)字命名2.創(chuàng)建MusicService然后命名為MusicServiceMusicService代碼框架publicclassMusicServiceextendsService{publicMusicService(){}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}MusicService添加代碼publicclassMusicServiceextendsService{
MediaPlayermPlayer;//定義音樂(lè)播放器變量@OverridepublicvoidonCreate(){super.onCreate();mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.start);
//創(chuàng)建音樂(lè)播放器mPlayer.setLooping(true);//設(shè)置可以重復(fù)播放
}@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);
mPlayer.start();}@OverridepublicvoidonDestroy(){super.onDestroy();
mPlayer.stop();}@OverridepublicIBinderonBind(Intentintent){thrownewUnsupportedOperationException("Notyetimplemented");}}【返回】onBind保留,不要?jiǎng)h除由startService()觸發(fā)由stopService()或stopSelf()觸發(fā)3.主程序(主要代碼)Buttonbt1=(Button)findViewById(R.id.button1);Buttonbt2=(Button)findViewById(R.id.button2);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){
Intentintent=newIntent(MainActivity.this,MusicService.class);switch(v.getId()){caseR.id.button1:
startService(intent);//啟動(dòng)服務(wù) break;caseR.id.button2:
stopService(intent);//停止服務(wù) break;
}}};bt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);【返回】顯示啟動(dòng)Service4.功能改進(jìn)增加暫停、重播、結(jié)束(停止服務(wù))功能思路:通過(guò)在Intent傳遞參數(shù)值給Service假設(shè)參數(shù)值:1--播放2--暫停3--重播0--結(jié)束(服務(wù))-1--退出(結(jié)束服務(wù)和Activity)主界面activity_main.xml(GridLayout布局)<GridLayoutxmlns:android=""android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_gravity="center_horizontal"android:columnCount="6"><Buttonandroid:id="@+id/play"android:layout_column="0"android:layout_gravity="left|top"android:layout_row="0"android:text="播放"/><Buttonandroid:id="@+id/pause"android:layout_column="1"android:layout_gravity="left|top"android:layout_row="0"android:text="暫停"/><Buttonandroid:id="@+id/replay"android:layout_column="2"android:layout_gravity="center_horizontal|top"android:layout_row="0"android:text="重播"/><Button
android:id="@+id/stopservice"android:layout_column="3"android:layout_gravity="left|top"android:layout_row="0"android:text="結(jié)束"/><Button
android:id="@+id/exit"android:layout_column="5"android:layout_gravity="left|top"android:layout_row="0"android:text="退出"/></GridLayout>MusicService主要代碼publicclassMusicServiceextendsService{
//定義音樂(lè)播放器變量MediaPlayermPlayer;@OverridepublicvoidonCreate(){super.onCreate();if(mPlayer==null){mPlayer=MediaPlayer.create(getApplicationContext(),R.raw.tick);mPlayer.setLooping(true);}}@OverridepublicvoidonDestroy(){super.onDestroy();if(mPlayer!=null){mPlayer.stop();
mPlayer.release();
}}MusicService代碼@OverridepublicvoidonStart(Intentintent,intstartId){super.onStart(intent,startId);if(intent!=null){
Bundlebundle=intent.getExtras();intop=bundle.getInt("op");switch(op){case1:if(!mPlayer.isPlaying()){
mPlayer.start();
}break;case2:if(mPlayer.isPlaying()){
mPlayer.pause();
}break; case3:if(mPlayer!=null){
mPlayer.stop();try{
mPlayer.prepare();}catch(IOExceptionex){ex.printStackTrace();
}
mPlayer.seekTo(0);mPlayer.start();
}break;case0:
stopSelf();break;}}//endswitch}//endif}//endstart播放暫停重播停止服務(wù)(服務(wù)自己結(jié)束服務(wù))在調(diào)用stop后如果需要再次通過(guò)start進(jìn)行播放則需要先調(diào)用prepare函數(shù)(要trycatch)取出BundleMainActivity主要代碼Buttonbt1=(Button)findViewById(R.id.play);Buttonbt2=(Button)findViewById(R.id.pause);Buttonbt3=(Button)findViewById(R.id.replay);Buttonbt4=(Button)findViewById(R.id.stopservice);Buttonbt5=(Button)findViewById(R.id.exit);View.OnClickListeneronclicklistener=newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.play:
op=1;break;caseR.id.pause:op=2;break;caseR.id.replay:
op=3;
break;caseR.id.stopservice:op=0;break;caseR.id.exit:op=-1;
break;
}//后面繼續(xù)假設(shè)參數(shù)值:1--播放2--暫停3--重播0--結(jié)束(服務(wù))-1--退出(結(jié)束服務(wù)和Activity)MainActivity主要代碼
finalIntentintent=newIntent(MainActivity.this,MusicService.class);Bundlebundle=newBundle();if(op!=-1){
bundle.putInt("op",op);intent.putExtras(bundle);
startService(intent);
}else{
//此處添加一個(gè)AlertDialog(見(jiàn)后頁(yè))}}//endonClick};//listenerbt1.setOnClickListener(onclicklistener);bt2.setOnClickListener(onclicklistener);bt3.setOnClickListener(onclicklistener);bt4.setO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 構(gòu)建環(huán)保城市以綠色能源技術(shù)為驅(qū)動(dòng)
- 建筑陶瓷客戶服務(wù)與滿意度調(diào)查考核試卷
- 仁果類果樹(shù)種植園農(nóng)產(chǎn)品營(yíng)銷策略研究考核試卷
- 電子商務(wù)物流配送的多元化服務(wù)模式
- 生殖健康教育與社區(qū)衛(wèi)生服務(wù)的結(jié)合實(shí)踐
- 電子醫(yī)療新篇章產(chǎn)品研發(fā)助力醫(yī)療進(jìn)步
- 2025-2030年新能源汽車用戶社群運(yùn)營(yíng)行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 2025-2030年圖書館閱讀輔助機(jī)器人行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 物聯(lián)網(wǎng)時(shí)代的網(wǎng)絡(luò)安全與防護(hù)策略
- 水資源保護(hù)意識(shí)的提升與社會(huì)責(zé)任
- 中央2025年交通運(yùn)輸部所屬事業(yè)單位招聘261人筆試歷年參考題庫(kù)附帶答案詳解
- 2025年上半年上半年重慶三峽融資擔(dān)保集團(tuán)股份限公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 特殊教育學(xué)校2024-2025學(xué)年度第二學(xué)期教學(xué)工作計(jì)劃
- 2025年技術(shù)員個(gè)人工作計(jì)劃例文(四篇)
- 勞保穿戴要求培訓(xùn)
- 工業(yè)控制系統(tǒng)應(yīng)用與安全防護(hù)技術(shù)(微課版)課件 第1章 緒論
- 藍(lán)色插畫風(fēng)徽州印象旅游景點(diǎn)景區(qū)文化宣傳
- 2024年形勢(shì)與政策課件及講稿合集
- 無(wú)人機(jī)運(yùn)營(yíng)方案
- 【公開(kāi)課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 建筑安全施工勞動(dòng)保護(hù)考核試卷
評(píng)論
0/150
提交評(píng)論