使用文件共享实现进程间通信

IpcUseFile1Activity运行在进程cn.edu.zufe.app0406.pro1中
IpcUseFile2Activity运行在进程cn.edu.zufe.app0406.pro2中
通过读写同一个文件实现通信,IpcUseFile1Activity将一个Book对象序列化后写入文件,IpcUseFile2Activity从文件中反序列化得到对象

Book.java

package cn.edu.zufe.app0406.bean;

import android.os.Parcel;
import android.os.Parcelable;

import java.io.Serializable;

public class Book implements Parcelable, Serializable {
    public int id;
    public String name;

    public Book(int id, String name) {
        this.id = id;
        this.name = name;
    }

    protected Book(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

    public static final Creator<Book> CREATOR = new Creator<Book>() {
        @Override
        public Book createFromParcel(Parcel in) {
            return new Book(in);
        }

        @Override
        public Book[] newArray(int size) {
            return new Book[size];
        }
    };

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }
}

IpcUseFile1Activity.java

package cn.edu.zufe.app0406;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import cn.edu.zufe.app0406.bean.Book;

public class IpcUseFile1Activity extends AppCompatActivity {

    private static final String TAG = "IpcUseFile1Activity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ipc_use_file1);

        persistToFile();
    }

    private void persistToFile() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Book book = new Book(1, "Android");
                File file = new File(getExternalFilesDir(null), "book.txt");
                if(file.exists()) file.delete();
                ObjectOutputStream stream = null;
                try {
                    stream = new ObjectOutputStream(new FileOutputStream(file));
                    stream.writeObject(book);
                    Log.d(TAG, "persist Book:" + book);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
2021-04-15 19:07:58.492 10741-10776/cn.edu.zufe.app0406.pro1 D/IpcUseFile1Activity: persist Book:cn.edu.zufe.app0406.bean.Book@64d4e86

IpcUseFile2Activity.java

package cn.edu.zufe.app0406;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

import cn.edu.zufe.app0406.bean.Book;

public class IpcUseFile2Activity extends AppCompatActivity {

    private static final String TAG = "IpcUseFile2Activity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ipc_use_file2);

        recoverFromFile();
    }

    private void recoverFromFile() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Book book = null;
                File file = new File(getExternalFilesDir(null), "book.txt");
                ObjectInputStream stream = null;
                if(file.exists()) {
                    try {
                        stream = new ObjectInputStream(new FileInputStream(file));
                        book = (Book) stream.readObject();
                        Log.d(TAG, "read Book:" + book);
                    }catch (IOException | ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}
2021-04-15 19:14:47.301 13048-13086/cn.edu.zufe.app0406.pro2 D/IpcUseFile2Activity: read Book:cn.edu.zufe.app0406.bean.Book@af526c8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值