Binder 必须是一个内部 class 吗?
Does Binder have to be an inner class?
我正在阅读 Android 绑定服务,http://developer.android.com/guide/components/bound-services.html
public class LocalService extends Service {
// Binder given to clients
private final IBinder mBinder = new LocalBinder();
// Random number generator
private final Random mGenerator = new Random();
/**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
/** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
}
}
所有教程、android 开发人员指南和书籍都建议将 Binder 作为服务的内部 class。真的只能是内部 class 吗?
它是一个内部 class,因此您可以轻松 return 外部 Service
实例。您也可以将其设为外部 class:
public class LocalBinder extends Binder {
private final LocalService mLocalService;
public LocalBinder(final LocalService service) {
mLocalService = service;
}
LocalService getService() {
return mLocalService;
}
}
使用内部 class 可以避免创建字段和构造函数的麻烦。
我正在阅读 Android 绑定服务,http://developer.android.com/guide/components/bound-services.html
public class LocalService extends Service {
// Binder given to clients
private final IBinder mBinder = new LocalBinder();
// Random number generator
private final Random mGenerator = new Random();
/**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
/** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
}
}
所有教程、android 开发人员指南和书籍都建议将 Binder 作为服务的内部 class。真的只能是内部 class 吗?
它是一个内部 class,因此您可以轻松 return 外部 Service
实例。您也可以将其设为外部 class:
public class LocalBinder extends Binder {
private final LocalService mLocalService;
public LocalBinder(final LocalService service) {
mLocalService = service;
}
LocalService getService() {
return mLocalService;
}
}
使用内部 class 可以避免创建字段和构造函数的麻烦。