Android使用Local Service的目的是什么

标签 android service

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/

相关文章:

php - 每 24 小时运行一次 php 任务

java - NsdManager 不解析多个发现的服务

c# - 为什么我的代码不能写入 SQL?

java - android中传感器的后台服务

java - 解决许多proguard警告

Android:如何查找 APK 所针对的平台版本?

android - 使用 Retrofit 从 Url 下载视频

Android:更新/刷新正在运行的服务

Android EditText 显示带有大写字母和数字行的键盘

android - 如何停止 Glide 升级?