高分求实例化一个IBinder的接口 本帖最后由 cxb746 于 2011-01-07 02:15:01 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*Activity与服务进行通信,开发人员通常把通信方法定义在接口里,然后让Ibinder对象实现该接口,而Activity通过该接口引用服务onBind()方法返回的Ibinder对象,然后调用Ibinder对象里自定义的通信方法。例子如下:本例是一个本地服务,即服务与Activity在同一个应用内部。接口:*/public interface ICountService { public int getCount();}服务类:public class CountService extends Service {private boolean quit;private int count;private ServiceBinder serviceBinder = new ServiceBinder();public class ServiceBinder extends Binder implements ICountService { @Override public int getCount() { return count; }}@Overridepublic IBinder onBind(Intent intent) { return serviceBinder;}@Overridepublic void onCreate() { super.onCreate(); new Thread(new Runnable() { @Override public void run() { while (!quit) { try { Thread.sleep(1000); } catch (InterruptedException e) {} count++; } } }).start();}@Overridepublic void onDestroy() { super.onDestroy(); this.quit = true;}}//客户端Activity:public class ClientActivity extends Activity { private ICountService countService; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.bindService(new Intent(this, CountService.class), this.serviceConnection, BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); this.unbindService(serviceConnection); } private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { countService = (ICountService) service;//对于本地服务,获取的实例和服务onBind()返回的实例是同一个 int i = countService.getCount(); Log.v("CountService", "Count is " + i); } @Override public void onServiceDisconnected(ComponentName name) { countService = null; } };} 通过activity绑定一个服务,在这个服务中实例化mIBinder这个个接口,如:private IMyService.Stub myService = new IMyService.Stub() { public Location getMyLocation(boolean locateType, int provider) throws RemoteException { return getLocation(locateType, provider); } }; @Override public IBinder onBind(Intent intent) { return myService; }然后在activity中通过myService 对象就可以调用接口中的方法喽 不太明白的话 看看这个吧 :http://blog.sina.com.cn/s/blog_643e83860100p07k.html 控制台报错:Error in an XML file: aborting build.怎么回事? TabHost里加ListView怎么加啊? android访问sqlserver,数据量较大。 Android NDK 使用STLport的方法 关于点击button的算法 android如何用导航式采集数据呢?? 数据库表格 闹钟使用服务(Service)来实现的吗? 相册适配器属性问题 安卓问题 android总联不上PC 布局的问题
/*Activity与服务进行通信,开发人员通常把通信方法定义在接口里,然后让Ibinder对象实现该接口,而Activity通过该接口引用服务onBind()方法返回的Ibinder对象,然后调用Ibinder对象里自定义的通信方法。例子如下:本例是一个本地服务,即服务与Activity在同一个应用内部。
接口:*/
public interface ICountService {
public int getCount();
}
服务类:
public class CountService extends Service {
private boolean quit;
private int count;
private ServiceBinder serviceBinder = new ServiceBinder();public class ServiceBinder extends Binder implements ICountService {
@Override
public int getCount() {
return count;
}
}
@Override
public IBinder onBind(Intent intent) {
return serviceBinder;
}
@Override
public void onCreate() {
super.onCreate();
new Thread(new Runnable() {
@Override
public void run() {
while (!quit) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
count++;
}
}
}).start();
}@Override
public void onDestroy() {
super.onDestroy();
this.quit = true;
}
}
//客户端Activity:
public class ClientActivity extends Activity {
private ICountService countService; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.bindService(new Intent(this, CountService.class), this.serviceConnection, BIND_AUTO_CREATE);
} @Override
protected void onDestroy() {
super.onDestroy();
this.unbindService(serviceConnection);
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
countService = (ICountService) service;//对于本地服务,获取的实例和服务onBind()返回的实例是同一个
int i = countService.getCount();
Log.v("CountService", "Count is " + i);
}
@Override
public void onServiceDisconnected(ComponentName name) {
countService = null;
}
};
}
private IMyService.Stub myService = new IMyService.Stub() {
public Location getMyLocation(boolean locateType, int provider) throws RemoteException {
return getLocation(locateType, provider);
}
};
@Override
public IBinder onBind(Intent intent) {
return myService;
}
然后在activity中通过myService 对象就可以调用接口中的方法喽
不太明白的话 看看这个吧 :http://blog.sina.com.cn/s/blog_643e83860100p07k.html