第六课 Binder的使用及上层原理

本文介绍了Binder在Android中的作用和含义,从IPC角度阐述其作为跨进程通信方式的角色。详细讲解了Binder的使用,特别是通过AIDL示例分析了Binder的工作机制,包括Stub类、Proxy以及onTransact方法。同时,讨论了Binder如何实现服务端和客户端的交互以及权限验证。
摘要由CSDN通过智能技术生成

1、Binder含义

  • 直观角度:Android中的一个类,实现了IBinder接口
  • IPC角度:Android中一种跨进程通信方式
  • 一种虚拟的物理设备,设备驱动是/dev/binder
  • Android Framework角度:ServiceManager连接各种Manager(ActivityManager、WindowManager等)和相应ManagerService的桥梁
  • 应用层角度:是客户端和服务端进行通信的媒介,当bindService的时候,服务端会翻译一个包含了服务端业务调用的Binder对象,通过这个Bind对象,客户端就可以获取服务端提供的服务或者数据。

2、Binder使用

Binder主要用于Service中,普通Service中的Binder不涉及进程间通信,较为简单,无法触及Binder的核心。因此这里使用AIDL为例,来分析Binder的工作机制。

首先在AS中创建一个工程,并新建以下三个文件:Book.java、Book.aidl、IBookManager.aidl

//Book.java文件
package com.syy.note1;

import android.os.Parcel;
import android.os.Parcelable;

public class Book implements Parcelable {
    public int bookId;
    public String bookName;

    public Book (int bookId, String bookName) {
        this.bookId = bookId;
        this.bookName = bookName;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(this.bookId);
        dest.writeString(this.bookName);
    }

    protected Book(Parcel in) {
        this.bookId= in.readInt();
        this.bookName= in.readString();
    }


    public static final Creator<Book> CREATOR = new Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel source) {
            return new Book(source);
        }

        @Override
        public Book[] newArray(int size) {
            return new Book[size];
        }
    };

}


//Book.aidl文件
package com.syy.note1;
parcelable Book;


// IBookManager.aidl文件
package com.syy.note1;

import com.syy.note1.Book;

// Declare any non-default types here with import statements
interface IBookManager {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    List<Book> getBookList();
    void addBook(in Book book);
}<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值