Android Framework学习笔记(3)----Binder

什么是Binder?

Binder是linux IPC机制的其中一种。它贯穿于应用层,framework层,以及linux Core层。

在kernel空间,Binder是虚拟的物理设备的驱动。

Android应用层的Service, broadcast, ContentProvider,Activity间的通信都是以Binder为核心。

什么是IPC?

跨进程通信, InterProcess Communication.

IPC机制都有哪些?

  • 通道
  • 信号量
  • 消息队列
  • Binder
  • Socket
  • 共享内存

Binder的创建

每一个进程/Service都有一个Binder.

frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

    public static Runnable zygoteInit(int targetSdkVersion, long[] disabledCompatChanges,
            String[] argv, ClassLoader classLoader) {
        if (RuntimeInit.DEBUG) {
            Slog.d(RuntimeInit.TAG, "RuntimeInit: Starting application from zygote");
        }

        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ZygoteInit");
        RuntimeInit.redirectLogStreams();

        RuntimeInit.commonInit();
        ZygoteInit.nativeZygoteInit();
        //zygote进程,启动一个新的Application
        return RuntimeInit.applicationInit(targetSdkVersion, disabledCompatChanges, argv,
                classLoader);
    }

frameworks/base/core/java/com/android/internal/os/RuntimeInit.java

    protected static Runnable applicationInit(int targetSdkVersion, long[] disabledCompatChanges,
            String[] argv, ClassLoader classLoader) {
        // If the application calls System.exit(), terminate the process
        // immediately without running any shutdown hooks.  It is not possible to
        // shutdown an Android application gracefully.  Among other things, the
        // Android runtime shutdown hooks close the Binder driver, which can cause
        // leftover running threads to crash before the process actually exits.
        nativeSetExitWithoutCleanup(true);

        VMRuntime.getRuntime().setTargetSdkVersion(targetSdkVersion);
        VMRuntime.getRuntime().setDisabledCompatChanges(disabledCompatChanges);

        final Arguments args = new Arguments(argv);

        // The end of of the RuntimeInit event (see #zygoteInit).
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);

        // Remaining arguments are passed to the start class's static main
        return findStaticMain(args.startClass, args.startArgs, classLoader);
    }

Binder的管理

SM来管理Binder

Binder的原理

利用mmap,让内核空间跟用户空间共享一块内存(1M减8K),

疑问

  • zygote为何在fork进程的时候使用socket,而非binder.除了zygote进程之外,任何进程都有binder.
  • 多进程开发有何优势?
    • 可以突破单一进程的内存限制
    • 隔离风险,
      • 降低APP崩溃风险
      • 规避系统内存泄漏,例如webview.
  • 用户空间和内核空间
    • 内核空间提供系统内核和设备驱动使用。
    • 用户空间提供用户程序和用户进程使用。
    • 用户空间通过系统调用ioctl访问内核空间。内核空间访问用户空间则相对容易。
    • 为了保护系统的稳定性和安全性,Android 系统设计了一些安全机制来限制用户空间对内核空间的访问。例如,权限管理、沙箱机制、SELinux 等都是为了确保只有经过授权和合法的操作才能访问和修改内核空间
  • AMS,activity manage service. android 10之前,四大组件由AMS管理。之后,ATMS单独管理activity.

  • ATMS, activity task manage service.

AIDL

AIDL是对IBinder的封装,降低使用Binder的复杂度。

AIDL, Android Interface Definition Languag, it is a language that defines the interface for interprocess communication (IPCin Android

HIDL

HAL interface definition language or HIDL is an interface description language (IDL) to specify the interface between a HAL and its users

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android HAL(硬件抽象层)是一种用于将Android操作系统与硬件设备进行交互的接口。PDF(Portable Document Format)是一种跨平台的文档格式,用于呈现和交流电子文档。 Android HAL提供了一组硬件相关的函数和驱动程序接口,使得Android操作系统能够与硬件设备进行通信和交互。它充当了操作系统和硬件之间的桥梁,使得开发者能够方便地访问和控制各种类型的硬件功能,如摄像头、触摸屏、传感器等。通过HAL,Android操作系统可以与不同厂商的硬件设备进行兼容,提供统一的开发接口,简化开发流程。 而PDF作为一种跨平台的文档格式,能够在不同设备和操作系统上保持文档的一致性。Android HAL中没有直接与PDF相关的接口或功能,但是Android操作系统本身提供了对PDF的支持。开发者可以使用Android提供的API和库来读取、渲染、创建和编辑PDF文档。 Android操作系统通过提供PDF相关的API,使得开发者能够在应用中实现对PDF文档的读取、展示和编辑。开发者可以使用Android的PDF库来打开PDF文档,获取文档的各种属性和信息,并将其呈现在应用中的界面上。同时,也可以通过API实现对PDF的编辑功能,如添加注释、修改内容等。 总之,Android HAL是Android操作系统与硬件设备进行交互的接口,而PDF是一种跨平台的文档格式。Android HAL通过提供硬件相关的函数和驱动程序接口,提供了对各种硬件设备的访问和控制功能。而Android操作系统本身通过API和库,为开发者提供了对PDF文档的读取、渲染、创建和编辑的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值