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和文件共享

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. 浅析android通过jni控制service服务程序的简易流程
  4. 《Android开发从零开始》——25.数据存储(4)
  5. Android系统配置数据库注释(settings.db)
  6. Android中不同应用间实现SharedPreferences数据共享
  7. android图表ichartjs
  8. android 创建桌面快捷方式 、插件
  9. Android内容提供者源码

随机推荐

  1. Web前端遍历对象应该如何操作呢?
  2. 【最值得收藏】27款基于Zynq的系统模块加
  3. Go语言学习笔记4
  4. web前端怎么获取cookie?新手前端开发者需
  5. 我,大厂离职,拿着千万美元融资搞了个近乎全
  6. 在iPhone 和 iPad苹果三件套办公应用中如
  7. 前端技巧:遍历数组都有哪些方式呢?
  8. 将S3设置为类SFTP服务用于数据上传
  9. 什么叫编程?什么人能学编程?
  10. 换IP