为什么我们使用另一个class 继承binder class 来访问BoundServices?

Why we use another class inheriting binder class to access BoundServices?

我知道绑定服务仅在 Activity 或任何组件需要它之前存在。 我们必须从 onBind 函数调用 MyLocalBinder class。 为什么会这样? 为什么不能直接调用呢?

public class MyService extends Service {

private final IBinder myBinder = new MyLocalBinder();

public MyService() {
}

@Override
public IBinder onBind(Intent intent) {

    return myBinder;
}

public String getCurrentTime(){

    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss", Locale.UK);
    return (df.format(new Date()));
}

public class MyLocalBinder extends Binder{

    MyService getService(){
        return MyService.this;
    }
}
}

如果您在同一个应用程序中使用活页夹调用,那么它是一种从其他组件(例如 activity.

访问您的某些服务 class 功能的方法

如果您在应用程序之间使用活页夹 api 调用,这意味着您试图从您的应用程序使用远程功能。由于两个应用程序 运行 在它们自己的进程中,绑定器将像具有安全性的管道一样工作。

您不能直接调用 MyBinder class,因为您不能直接访问服务 class 成员。由于 bindservice 提供了一个带有 binder 对象的回调,因此建议遵循这种方法。