IPC机制(一)

本文介绍了Android中的进程间通信(IPC)机制,包括如何开启多进程,多进程下数据共享的问题,以及IPC的基础知识。重点讨论了Parcelable和Serializable接口在序列化中的作用,深入讲解了Binder作为跨进程通信核心的原理,并通过AIDL(Android Interface Definition Language)展示了如何定义和使用服务间的接口。最后提到了Binder调用的线程安全问题和代理模式的应用。
摘要由CSDN通过智能技术生成

最近在了解Service时接触到Android IPC,IPC全称是Inter-Process Communication,意思是进程间通信,当然也包括了跨进程通信。要了解IPC,首先需要知道的是Android中开启多进程模式的方式。

开启多进程

想要在一个应用程序中开启多个进程,在Android中有这一种方法:即在AndroidMenifest.xml中给四大组件指定一个android:process的属性,以下为示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ipc">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SecondActivity"
            android:label="@string/app_name"
            android:process=":remote"
            >
        </activity>
    </application>

</manifest>

程序运行后打开DDMS会发现出现了两个进程,如图:
这里写图片描述
一个是com.ipc即包名,另外一个则是添加了上述配置文件 :remote后缀,当然 android:process这个属性也可以自己命名,如 android:process=”com.ipc.remote”。其中的区别是前者是私有进程,其他应用不可以和它跑在同一个线程,后者为全局进程,功能相反。

多进程的问题

经过上面的测试,会发现原来在一个程序中开启多进程那么简单。其实,看似简单,却有着许多进程间数据共享的问题。举个例子,我们再创建一个类Manager,里面存在一个全局变量:

public class Manager {
    public static int mId = 1;
}
public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("TAG", "Id = " + Manager.mId + "");
        //在进程1中修改mId
        Manager.mId = 2;
        startActivity(new Intent(this, SecondActivity.class));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值