• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android之使用文件进行IPC,android文件ipc

Android之使用文件进行IPC,android文件ipc

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android ipc,android ipc机制,android ipc是什么,android ipc通信,ipc文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android之使用文件进行IPC,android文件ipc


一、文件进行IPC介绍

共享文件也是一种不错的进程间通信方式,两个进程通过读/写同一个文件来交换数据。在Windows上,一个文件如果被加了排斥锁将会导致其他线程无法对其进行访问,包括读写,而由于Android系统基于Linux,使其并发读/写文件可以没有限制地进行,甚至两个线程同时对同一个文件进行读写操作是允许的,尽管这可能出现问题。通过文件交换数据很好使用,除了可以交换一些文本信息外,还可以序列化一个对象到文件系统中的同时从另一个进程中恢复这个对象。

二、使用方法

1.数据类实现Parcelable或Serializable接口

public class User implements Parcelable, Serializable {
public User() {
    }

    public User(int userId, String userName, boolean isMale) {
        ...
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ...
    }

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

        @Override
        public User[] newArray(int size) {
            return ...;
        }
    };

    private User(Parcel in) {
        ...
    }

    @Override
    public String toString() {
        return ...;
    }
}

2.序列化一个对象到sd卡上的一个文件里

private void persistToFile() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                User user = new User(1, "hello world", false);
                File dir = new File(MyConstants.CHAPTER_2_PATH);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
                ObjectOutputStream objectOutputStream = null;
                try {
                    objectOutputStream = new ObjectOutputStream(new FileOutputStream(cachedFile));
                    objectOutputStream.writeObject(user);
                    Log.d(TAG, "persist user:" + user);
                    mTextView.setText("persist user:" + user);
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    MyUtils.close(objectOutputStream);
                }
            }
        }).start();
    }

3.在另外的进程中反序列化

private void recoverFromFile(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                User user = null;
                File cachedFile = new File(MyConstants.CACHE_FILE_PATH);
                if(cachedFile.exists()){
                    ObjectInputStream objectInputStream = null;
                    try{
                        objectInputStream = new ObjectInputStream(new FileInputStream(cachedFile));
                        user = (User)objectInputStream.readObject();
                        Log.d(TAG,"recover user:"+user);
                        mTextView.setText("recover user:"+user);
                    }catch (IOException e) {
                        e.printStackTrace();
                    }catch (ClassNotFoundException e){
                        e.printStackTrace();
                    }finally {
                        MyUtils.close(objectInputStream);
                    }
                }
            }
        }).start();
    }

4.在AndroidManifest.xml中开启多进程

       <activity
            ...
            android:process=":remote" />

三、小案例

1.修改activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.zhangmiao.ipcdemo.MainActivity"
    android:orientation="vertical"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="File">
    </TextView>
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="open activity B"
        />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="A">
    </TextView>
</LinearLayout>

2.添加activity_second.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="at activity B"
        android:layout_gravity="center_horizontal"
        />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android之使用文件进行IPC,android文件ipc
  • Android IPC机制(五)用Socket实现跨进程聊天程序

相关文章

  • 2017-05-26BaseAdapter的使用(笔记)
  • 2017-05-26docke swarm mode 集群应用之四-私有仓库harbor设置过程
  • 2017-05-26Android SDK在线更新镜像服务器,androidsdk
  • 2017-05-26android开发之路01,android之路01
  • 2017-05-26Android--BroadcastReceiver应用详解
  • 2017-05-26Android MVP 设计模式,androidmvp
  • 2017-05-26商城热卖,淘宝热卖商城
  • 2017-05-26Android 调用百度地图API,androidapi
  • 2017-05-26GsonFormat插件从配置到使用,gsonformat插件配置
  • 2017-05-26android自定义控件(二),简易的数值输入器

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Redis3.0.7集群部署完整版
    • 关于我,关于我们
    • View的事件分发机制,View事件分发机制
    • 在 Android 上使用 RxNetty
    • android源码解析之(三)--)HandlerThread
    • 活动的生命周期系列(一)返回栈,生命周期系列
    • Android 手机卫士10--应用管理器,android10--
    • 菜单(Menu)的三中创建方式——Android开发之路2,menuandroid
    • android经典Demo(转载),androiddemo
    • 注册时获取验证码常用的倒计时工具,注册时验证码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有