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