通過綁定的方式啓動service

//定義一個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;
}
}





發佈了37 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章