通过绑定的方式启动service

来源:互联网 发布:虚拟机安装mac 显卡 编辑:程序博客网 时间:2024/05/14 09:32

//定义一个IPerson.aidl文件

package com.example.service;

 
interface IPerson{


void setName(String name);
void setSex(String sex);
void setAge(int age);
String getPerson();

}

//创建PersonImpl.java

package com.example.service;


import android.os.RemoteException;


public class PersonImpl extends IPerson.Stub{
private String name,sex;
private int age;


@Override
public void setName(String name) throws RemoteException {
this.name=name;

}


@Override
public void setSex(String sex) throws RemoteException {
// TODO Auto-generated method stub
this.sex=sex;
}


@Override
public void setAge(int age) throws RemoteException {
// TODO Auto-generated method stub
this.age=age;
}


@Override
public String getPerson() throws RemoteException {
// TODO Auto-generated method stub
return "name="+name+",sex="+sex+",age="+age;
}







}



//服务类MyService.java

package com.example.service;


import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
/**
 * 实现一个绑定
 * @author Administrator
 *
 */
public class MyService extends Service{
private PersonImpl personImpl;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("onCreate。。。。");

}
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind。。。");
personImpl=new PersonImpl();

return personImpl;
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("onUnbind。。。");
return super.onUnbind(intent);
}


}

//在Activity中绑定和解除绑定

//绑定服务通常用于两个进程之间的通信

//事先设置好
mBound=false;//当前为非绑定状态
IPerson person;//要实现接口的方法
//服务连接对象
private ServiceConnection conn=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 绑定成功后服务会调用该方法,注意,解除绑定服务时不会调用
person= IPerson.Stub.asInterface(service);
mBound = true;
System.out.println(person);
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
//服务异常终止时会调用
mBound = false;
}

};
//绑定Service
public void bindIntentServiceClick(View v){
Intent intent=new Intent(this,MyService.class);
//参数(intent,服务连接对象,绑定服务的标记)
bindService(intent, conn, Context.BIND_AUTO_CREATE);

}
//解除绑定绑定Service
public void unbindIntentServiceClick(View v){
//判断是否为绑定状态
if(mBound){
unbindService(conn);
mBound=false;
}
}





0 0
原创粉丝点击