别人家的Android开发经验

android进程间通讯(1)--Bundle和文件共享

2018-02-07  本文已影响33人  xingkong_hdc

Android进程间通讯(1)–Bundle和文件共享

前言:之前记录过android的IPC方式有Bundle,文件共享,Messenger,AIDL,ContentProvider和socket。后面将详解这几种IPC方式。按类别原理分类,实际上方式可以分为4种:1.Bundle 2.文件共享 3.Binder,包括Messenger,AIDL, ContentProvider 4.socket。接下来讲解Bundle和文件共享的使用

1.Bundle

android四大组件中的三大组件(Activity, Service, Receiver)都支持在Intent传递Bundle数据,由于Bundle实现了Parcelable接口,所以可以十分方便的在进程间传输,当然我们传输的数据必须能够被序列化,比如基本类型、实现了Parcelable接口的对象、实现了Serializable接口的对象以及一些Android所支持的特殊对象。

(1).创建多进程

在同一个android应用中创建多进程,需要修改AndroidManifest.xml中process属性,即在四大组件的根节点添加android:process=”hdc.video”,即可创建一个新的名为hdc.video的进程

          android:configChanges="keyboardHidden|orientation|screenSize"

          android:exported="true"

          android:screenOrientation="portrait"

          android:process="hdc.video">

而应用的默认进程是应用的包名,也可以在application根节点修改process属性进行更改

        android:name="com.hdc.voicesAssistant"

        android:allowBackup="true"

        android:icon="@mipmap/dan_icon"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/dan_icon"

        android:supportsRtl="true"

        android:process="com.hdc.voiceAssistant"

        android:theme="@style/AppTheme">

(2).使用Bundle进行通讯

假如android:process=”com.hdc.voiceAssistant” 进程的MainActivity需要传递数据到android:process=”hdc.video”的进程的WebVideoActivity,则在MainActivity中

          Intent intent = new Intent();

            intent.setClass(MainActivity.this, WebVideoActivity.class);

            Bundle bundle = new Bundle();

            bundle.putString("second", "second");

            intent.putExtras(bundle);

            startActivity(intent);

在WebVideoActivity的onCreate方法中接受数据

          Bundle bundle = getIntent().getExtras();

          bundle.getString("second");

2.文件共享

Android是基于Linux内核,使得其并发读写文件可以没有限制地进行,甚至两个线程对同一个文件进行写操作都是允许的。通过文件交换数据使得进程间的通讯很好进行,但是其弊端就是可能存在数据异常,延迟等问题。通过文件共享的方式共享数据对文件的格式是没有要求的,可以是文本文件也可以是XML文件,只要读写双方约定好数据格式即可。

Android中常用的方式是SharedPreference,起底层使用的是xml。存数据如下:

        context.getSharedPreferences("user_preferences",Activity.MODE_PRIVATE)

        SharedPreferences.Editor editor = mUserPreferences.edit();

        editor.putString("user_id", user_id);

        editor.apply();

其他进程或当前进程其他地方使用时只需要获取起数据即可:

        context.getSharedPreferences("user_preferences",Activity.MODE_PRIVATE)

        String user_id = preference.getString("user_id","");

总结

上面两种方式是比较常用的进程间通讯方式,也是比较简单的IPC方式。

CSDN:adnroid进程间通讯(1)--Bundle和文件共享

上一篇下一篇

猜你喜欢

热点阅读