Android中的Service概念及用途Word下载.docx
- 文档编号:19800879
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:14
- 大小:202.65KB
Android中的Service概念及用途Word下载.docx
《Android中的Service概念及用途Word下载.docx》由会员分享,可在线阅读,更多相关《Android中的Service概念及用途Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
可以看到,其功能主要由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("
finish();
}
importandroid.app.Service;
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=null;
另外,需要在Manifest.xml文件中对Service进行注册。
其注册信息如下所示:
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
manifestxmlns:
android="
package="
com.shen.service"
android:
versionCode="
1"
versionName="
<
applicationandroid:
icon="
@drawable/icon"
label="
@string/app_name"
activityandroid:
name="
.TestMusicService"
intent-filter>
actionandroid:
android.intent.action.MAIN"
/>
categoryandroid:
android.intent.category.LAUNCHER"
/intent-filter>
/activity>
serviceandroid:
.Music"
/>
android.intent.category.default"
/service>
/application>
uses-sdkandroid:
minSdkVersion="
2"
/manifest>
示例2:
Service与Activity通信:
Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL)这一节我不作过多描述,当我们想获取启动的Service实例时,我们可以用到bindService和onBindService方法,它们分别执行了Service中IBinder()和onUnbind()方法。
为了让大家更容易理解,我写了一个简单的Demo,大家可以模仿,一步一步的来。
第一步:
新建一个Android工程,命名为ServiceDemo.
第二步:
修改main.xml代码,这里增加了四个按钮,代码如下:
LinearLayoutxmlns:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
>
TextView
id="
@+id/text"
wrap_content"
text="
@string/hello"
Button
@+id/startservice"
startService"
@+id/stopservice"
stopService"
@+id/bindservice"
bindService"
@+id/unbindservice"
unbindService"
/LinearLayout>
第三步:
新建一个Service,命名为MyService.java代码如下:
packagecom.tutor.servicedemo;
importandroid.os.Binder;
importandroid.text.format.Time;
importandroid.util.Log;
publicclassMyServiceextendsService{
//定义个一个Tag标签
privatestaticfinalStringTAG="
MyService"
;
//这里定义一个Binder类,用在onBind()有方法里,这样Activity那边可以获取到
privateMyBindermBinder=newMyBinder();
@Override
publicIBinderonBind(Intentintent){
Log.e(TAG,"
startIBinder~~~"
);
returnmBinder;
}
publicvoidonCreate(){
startonCreate~~~"
super.onCreate();
publicvoidonStart(Intentintent,intstartId){
startonStart~~~"
publicvoidonDestroy(){
startonDestroy~~~"
publicbooleanonUnbind(Intentintent){
startonUnbind~~~"
returnsuper.onUnbind(intent);
//这里我写了一个获取当前时间的函数
publicStringgetSystemTime(){
Timet=newTime();
t.setToNow();
returnt.toString();
publicclassMyBinderextendsBinder{
MyServicegetService()
{
returnMyService.this;
}
第四步:
修改ServiceDemo.java,代码如下:
importandroid.content.ComponentName;
importandroid.content.Context;
importandroid.content.ServiceConnection;
publicclassServiceDemoextendsActivityimplementsOnClickListener{
privateMyServicemMyService;
privateTextViewmTextView;
privateButtonstartServiceButton;
privateButtonstopServiceButton;
privateButtonbindServiceButton;
privateButtonunbindServiceButton;
privateContextmContext;
//这里需要用到ServiceConnection在Context.bindService和context.unBindService()里用到
privateServiceConnectionmServiceConnection=newServiceConnection(){
//当bindService,让TextView显示MyService里getSystemTime()方法的返回值
publicvoidonServiceConnected(ComponentNamename,IBinderservice){
mMyService=((MyService.MyBinder)service).getService();
mTextView.setText("
IamfromeService:
"
+mMyService.getSystemTime());
}
publicvoidonServiceDisconnected(ComponentNamename){
};
publicvoidonCreate(BundlesavedInstanceState){
setupViews();
publicvoidsetupViews(){
mContext=ServiceDemo.this;
mTextView=(TextView)findViewById(R.id.text);
startServiceButton=(Button)findViewById(R.id.startservice);
stopServiceButton=(Button)findViewById(R.id.stopservice);
bindServiceButton=(Button)findViewById(R.id.bindservice);
unbindServiceButton=(Button)findViewById(R.id.unbindservice);
startServiceButton.setOnClickListener(this);
stopServiceButton.setOnClickListener(this);
bindServiceButton.setOnClickListener(this);
unbindServiceButton.setOnClickListener(this);
//TODOAuto-generatedmethodstub
if(v==startServiceButton){
Intenti=newIntent();
i.setClass(ServiceDemo.this,MyService.class);
mContext.startService(i);
}elseif(v==stopServiceButton){
mContext.stopService(i);
}elseif(v==bindServiceButton){
mContext.bindService(i,mServiceConnection,BIND_AUTO_CREATE);
}else{
mContext.unbindService(mServiceConnection);
第五步:
修改AndroidManifest.xml代码(将我们新建的MyService注册进去如下代码第14行:
)
com.tutor.servicedemo"
.ServiceDemo"
<
.MyService"
exported="
true"
7"
第六步:
执行上述工程,效果图如下:
点击startServie按钮时先后执行了Service中onCreate()->
onStart()这两个方法,打开Logcat视窗效果如下图:
我们这时可以按HOME键进入Settings(设置)->
Applications(应用)->
Run
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 中的 Service 概念 用途