Android官方开发者指南中,Bound Service章节,有一个关于本地binder扩展Binder的例子,代码如下:
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);
}
}
尤其是客户端调用的方法:
/** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
}
我觉得有点困惑,这么简单的action,为什么我们需要把它放到Service中?更重要的是,这个Service只是一个本地服务,只能在当前应用程序进程中使用,而不能在其他应用程序中使用。当然,显然这个方法可以作为公共(public)方法放入任何类中,这对于上面的情况来说已经足够了。
我能理解将文件下载等代码放入Service中的目的(或者也许IntentService更合适一些),这适合Service的特点:运行长时间处理代码。
但我不明白的是为什么我们需要这样的本地服务?
最佳答案
需要本地绑定(bind)服务来处理客户端-服务器情况
假设您有这样的情况,您需要多次执行一些长时间操作,并且还需要其结果并在您的 Activity 中对结果执行一些操作。
在这种情况下,您可以绑定(bind)服务并使用其方法,还可以使用回调来获取结果并在 Activity 中执行操作。
关于Android使用Local Service的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35787118/