美文网首页
Android知识点:binder、lock

Android知识点:binder、lock

作者: 书虫大王X | 来源:发表于2021-06-24 08:33 被阅读0次
    1、Java并发编程:Lock
    • synchronize只有在当前任务执行完成或是JVM发生异常让其自动释放锁,如果synchronize所在线程阻塞了,该线程不会主动释放锁,其他线程会一直等待下去。但lock不会,如果尝试获取不到锁,线程可以不用等待就结束了
    • 当有多个线程读写文件时,读、写操作会发生冲突现象,写、写操作会发生冲突现象,读、读操作不应该发生冲突现象。但是采用synchronized关键字来实现同步的话,如果多个线程都只是进行读操作,当一个线程在进行读操作时,其他线程只能等待无法进行读操作。因此就需要一种机制来使得多个线程都只是进行读操作时,线程之间不会发生冲突,通过Lock就可以办到。
    • 通过Lock可以知道线程有没有成功获取到锁。这个是synchronized无法办到的。
    • lock需要在代码执行完后手动释放锁,但是synchronize会自动释放
    • lock一般用于大量代码的同步,synchronize用于少量代码

    5、Android中多线程使用方式。面试官追问如何停止一个线程:

    6、Android Bitmap:

    • 通过bitmapfactory获取bitmap对象:bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.feng);
    7、Android Binder机制原理:
    • 系统内存分为用户空间和内核空间
    • 用户空间:用户程序的运行空间
    • 内核空间:Android系统运行的空间。将空间进行隔离有一个原因是为了防止用户的APP崩溃时,影响到系统的运行。
    • 内核空间可以执行任意命令,调用系统的一切资源;用户空间只能执行简单的运算,不能直接调用系统资源,必须通过系统接口(又称 system call),才能向内核发出指令。
    • Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间
    • Client代表客户端进程,Server端为客户端进程提供各种服务,如音视频等
    • Service Manager用来管理各种系统服务
    • Binder驱动提供进程间通信的能力
    • 核心组件便是Binder驱动程序,Service Manager提供了辅助管理的功能,Client和Server正是在Binder驱动和Service Manager提供的基础设施上,进行Client-Server之间的通信。Service Manager和Binder驱动已经在Android平台中实现好,开发者只要按照规范实现自己的Client和Server组件就可以了。
    • Binder驱动程序提供设备文件/dev/binder与用户空间交互,Client、Server和Service Manager通过open和ioctl文件操作函数与Binder驱动程序进行通信
    • Service Manager是一个守护进程,用来管理Server,并向Client提供查询Server接口的能力
    • APP是运行在虚拟机的,而虚拟机的内存由系统分配的,APP运用多进程可以增大运行内存(一般系统分配给每个进程的内存是确定的);将不同任务分配到不同内存,一个进程崩溃,一会影响另一个
    • 进程之间通过内核空间通信,binder:Android特有的通信方式


      image.png
    • binder只用拷贝一次:将数据从发送方拷贝到内核空间,接收方通过mmap(内存映射)从内核获得数据。(接收方需要的数据的地址对应域于内核空间中该数据的物理地址,binder就是完成这个映射操作)
    • binder比传统的IPC安全,Android为每个安装好的应用程序分配了的UID,故进程的UID是鉴别进程身份的重要标志;但是传统的IPC是在程序运行的时候自己上报PID用于标识自己,所以不安全。
    • AIDL接口:帮助生成binder调用模板
    • 用户程序要获取服务都是通过访问serviceManager,然后让它去调用对应的服务。
    • AmS :四大组件服务
    • 传统IPC访问接入点是开放的,无法建立私有通道。
    • Binder对象是一个可以跨进程引用的对象,它的实体位于一个进程中,而它的引用却遍布于系统的各个进程之中。
    • serviceManager:相当于路由的作用,路由器是连接两个或多个网络的硬件设备,在网络间起网关的作用
    • 对Server而言,Binder可以看成Server提供的实现某个特定服务的访问接入点, Client通过这个‘地址’向Server发送请求来使用该服务;对Client而言,Binder可以看成是通向Server的管道入口,要想和某个Server通信首先必须建立这个管道并获得管道入口。
    • Binder使用了面向对象的思想来描述其作为访问接入点及其在Client中的入口:Binder是一个实体位于Server中的对象,该对象提供了一套方法用以实现对服务的请求。遍布于client中的入口可以看成指向这个binder对象的‘指针’,一旦获得了这个‘指针’就可以调用该对象的方法访问server。
    • 在Client看来,通过Binder‘指针’调用其提供的方法和通过指针调用其它任何本地对象的方法并无区别,尽管前者的实体位于远端Server中,而后者实体位于本地内存中。‘指针’是C++的术语,而更通常的说法是引用,即Client通过Binder的引用访问Server。
    • 面向对象思想的引入将进程间通信转化为通过对某个Binder对象的引用调用该对象的方法,而其独特之处在于Binder对象是一个可以跨进程引用的对象,它的实体位于一个进程中,而它的引用却遍布于系统的各个进程之中。
    • SMgr的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。注册了名字的Binder叫实名Binder。Server创建了Binder实体,为其取一个字符形式的名字,将这个Binder连同名字以数据包的形式通过Binder驱动发送给SMgr,通知SMgr注册一个Binder,它位于某个Server中。驱动为这个穿过进程边界的Binder创建位于内核中的实体节点以及SMgr对实体的引用,将名字及新建的引用打包传递给SMgr。
    • Server向SMgr注册了Binder实体及其名字后,Client就可以通过名字获得该Binder的引用了。
    • 并不是所有Binder都需要注册给SMgr的。Server端可以通过已经建立的Binder连接将创建的Binder实体引用传给Client,当然这条已经建立的Binder连接必须是通过实名Binder实现。由于这个Binder没有向SMgr注册名字,所以是个匿名Binder。Client将会收到这个匿名Binder的引用,通过这个引用向位于Server中的实体发送请求。匿名Binder为通信双方建立一条私密通道,只要Server没有把匿名Binder发给别的进程,别的进程就无法通过穷举或猜测等任何方式获得该Binder的引用,向该Binder发送请求。

    8、Android进程间通信(IPC)机制Binder简要介绍和学习

    相关文章

      网友评论

          本文标题:Android知识点:binder、lock

          本文链接:https://www.haomeiwen.com/subject/wavgiktx.html