Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我们使用另一个继承binder类的类来访问BoundServices?_Android_Android Service_Android Binder - Fatal编程技术网

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

Android 为什么我们使用另一个继承binder类的类来访问BoundServices?,android,android-service,android-binder,Android,Android Service,Android Binder,我知道绑定服务只在活动或任何组件需要它之前有效。 我们必须从onBind函数调用MyLocalBinder类。 为什么会这样? 为什么我们不能直接叫它 public class MyService extends Service { private final IBinder myBinder = new MyLocalBinder(); public MyService() { } @Override public IBinder onBind(Intent intent) {

我知道绑定服务只在活动或任何组件需要它之前有效。 我们必须从onBind函数调用MyLocalBinder类。 为什么会这样? 为什么我们不能直接叫它

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)访问某些服务类功能的方法

如果在应用程序之间使用绑定器api调用,这意味着您试图从应用程序使用远程功能。由于两个应用程序在各自的进程中运行,所以binder的作用就像一个具有安全性的管道


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

但是为什么我们要使用MyLocalBinder类来使用该功能呢?为什么我们不能直接访问服务?我们总是可以创建服务的对象,在主活动中使用它,但是要调用绑定的服务,是否需要调用MyLocalBinder类?服务是一个android应用程序组件。您不应创建服务、活动、接收者等对象。。。Android UI框架将在您调用bindservice后启动活动。如果您手动创建这些类对象,这就像在代码中引入内存泄漏一样。此外,该框架将失去对这些组件生命周期的控制。