Android中的Service概念及用途.docx
- 文档编号:6780797
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:14
- 大小:202.65KB
Android中的Service概念及用途.docx
《Android中的Service概念及用途.docx》由会员分享,可在线阅读,更多相关《Android中的Service概念及用途.docx(14页珍藏版)》请在冰豆网上搜索。
Android中的Service概念及用途
Service概念及用途
Android中的Service,其意思是“服务”,它是在后台运行,不可交互的。
Service自己不能运行,需要通过某一个Activity或者其它Context对象来调用,如Context.startService()和Context.bindService()两种方式启动Service。
Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那我们什么时候会用到Service呢?
比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了,又比如当我们一个应用的数据是通过网络获取的,不同时间(一段时间)的数据是不同的这时候我们可以用Service在后台定时更新,而不用每打开应用的时候在去获取。
如果在Service的onCreate或者onStart方法中做一些很耗时的动作,最好是启动一个新线程来运行这个Service,因为,如果Service运行在主线程中,会影响到程序的UI操作或者阻塞主线程中的其它事情。
Service生命周期
Service的生命周期方法比Activity要少一些,只有onCreate、onStart、onDestroy。
有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1)通过startService启动
Service启动的时候会经历生成开始(onCreateonStart)过程,Service停止的时候直接进入销毁过程(onDestroy)。
而如果是调用者直接退出而没有调用stopService,Service会一直在后台运行。
直到下次调用者再启动起来,并明确调用stopService。
2)通过bindService启动
通过bindService方法启动Service,其只会运行onCreate方法,如果调用退出了,Service会调用onUnbind,onDestroyed方法。
Service的onCreate方法只会被调用一次。
如果先绑定了,那么启动的时候就直接运行Service的onStart方法,如果先启动,那么绑定的时候就直接运行onBind方法。
如果先绑定上了,就停止不了,也就是stopService不能用了,只能先unbindService,再stopService,所以,先启动还是先绑定,是有区别的。
示例1
下面以一个通过Service来播放音乐的例子说明Service的具体用法,其具体界面如下所示:
在这个界面中,点击“StartPlaying”按钮,即开始打开音乐文件,进行循环播放。
点击“StopPlaying”按钮,即关闭音乐,并退出应用程序。
其程序结构如下图所示:
可以看到,其功能主要由Music与TestMusicService两个类组成,其源代码如下:
packagecom.shen.service;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
publicclassTestMusicServiceextendsActivity{
privateTextViewtv;
privateButtonbtn1,btn2;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1=(Button)this.findViewById(R.id.btn1);
btn1.setOnClickListener(newButtonListener1());
btn2=(Button)this.findViewById(R.id.btn2);
btn2.setOnClickListener(newButtonListener2());
}
privateclassButtonListener1implementsOnClickListener{
publicvoidonClick(Viewv){
TestMusicService.this.startService(newIntent("com.shen.music1"));
}
}
privateclassButtonListener2implementsOnClickListener{
publicvoidonClick(Viewv){
TestMusicService.this.stopService(newIntent("com.shen.music1"));
finish();
}
}
}
packagecom.shen.service;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.media.MediaPlayer;
importandroid.os.IBinder;
publicclassMusicextendsService{
privateMediaPlayermp;
publicIBinderonBind(Intentintent){
returnnull;
}
publicvoidonStart(Intentintent,intstartId){
super.onStart(intent,startId);
if(mp!
=null){
mp.stop();
}
mp=MediaPlayer.create(this,R.raw.music_1);
mp.setLooping(true);
mp.start();
}
publicvoidonDestroy(){
super.onDestroy();
mp.stop();
mp=null;
}
}
另外,需要在Manifest.xml文件中对Service进行注册。
其注册信息如下所示:
xmlversion="1.0"encoding="utf-8"?
>
android=" package="com.shen.service" android: versionCode="1" android: versionName="1.0"> icon="@drawable/icon"android: label="@string/app_name"> name=".TestMusicService" android: label="@string/app_name"> name="android.intent.action.MAIN"/> name="android.intent.category.LAUNCHER"/> name=".Music"> name="com.shen.music1"/> name="android.intent.category.default"/> minSdkVersion="2"/> 示例2: Service与Activity通信: Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL)这一节我不作过多描述,当我们想获取启动的Service实例时,我们可以用到bindService和onBindService方法,它们分别执行了Service中IBinder()和onUnbind()方法。 为了让大家更容易理解,我写了一个简单的Demo,大家可以模仿,一步一步的来。 第一步: 新建一个Android工程,命名为ServiceDemo. 第二步: 修改main.xml代码,这里增加了四个按钮,代码如下: xmlversion="1.0"encoding="utf-8"? > android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent" > android: id="@+id/text" android: layout_width="fill_parent" android: layout_height="wrap_content" android: text="@string/hello" />
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 中的 Service 概念 用途