Object类型作为binder调用的参数--如何实现这种自定义类型

本文分析了ActivityManagerService如何通过Binder调用IApplicationThread的bindApplication()方法,重点讨论了自定义类型如ProviderInfo在Binder通信中的处理。关键在于实现Parcelable接口,包括writeToParcel()进行对象扁平化和定义CREATOR以恢复对象。Parcelable相比Serializable效率更高,是Android为Binder通信设计的特定序列化方式。结合AIDL使用,可参考相关博文进一步了解。
摘要由CSDN通过智能技术生成

分析ActivityManagerService和应用进程的IApplicationThread的通信说明:

1.ActivityManagerService调用IApplicationThread客户端的bindApplication()方法,其中IApplicationThread的定义如下:

 void bindApplication(String packageName, ApplicationInfo info, List<ProviderInfo> providers,
            ComponentName testName, ProfilerInfo profilerInfo, Bundle testArguments,
            IInstrumentationWatcher testWatcher, IUiAutomationConnection uiAutomationConnection,
            int debugMode, boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
            Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
            Bundle coreSettings) throws RemoteException;

然后就可以看看这些参数都是怎么实现,拿ProviderInfo举例分析:

package android.content.pm;

import android.os.Parcel;
import android.os.Parcelable;
import android.os.PatternMatcher;
import android.util.Printer;

/**
 * Holds information about a specific
 * {@link android.content.ContentProvider content provider}. This is returned by
 * {@link android.content.pm.PackageManager#resolveContentProvider(java.lang.String, int)
 * PackageManager.resolveContentProvider()}.
 */
public final class ProviderInfo extends ComponentInfo
        implements Parcelable {
    
    /** The name provider is published under content:// */
    public String authority = null;
    
    /** Optional permission required for read-only access this content
     * provider. */
    public String rea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值