共享文件也是一种不错的进程间通信方式,两个进程通信读写同一个文件夹交换数据。
A进程把数据写入文件,B进程通过读取这个文件来获取数据。
下面举个例子
注册
<activity android:name=".ipc_demo3.SharedFileSaveDataActivity" />
<activity
android:name=".ipc_demo3.SharedFileGetDataActivity"
android:process="com.shared.file.data.remote" />
保存数据
public class SharedFileSaveDataActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_file_data_layout);
TextView dealData = (TextView) findViewById(R.id.deal_data_tv);
String titleStr = "保存数据";
dealData.setText(titleStr);
saveData();
}
private void saveData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
String fileName = FileUtils.getSdPath() + File.separator + "sharedFileData.txt";
File file = new File(fileName);
boolean parentFileFlag = true;
if (!file.getParentFile().exists()) {
parentFileFlag = file.getParentFile().mkdirs();
Log.e("共享文件", "创建文件夹是否成功: " + parentFileFlag);
}
boolean fileFlag = true;
if (!file.exists()) {
fileFlag = file.createNewFile();
Log.e("共享文件", "创建文件是否成功: " + fileFlag);
}
if (parentFileFlag && fileFlag) {
Book2 book = new Book2(111, "android开发艺术");
ObjectOutputStream outPutStream = new ObjectOutputStream(new FileOutputStream(fileName));
outPutStream.writeObject(book);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
获取数据
public class SharedFileGetDataActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_file_data_layout);
TextView dealData = (TextView) findViewById(R.id.deal_data_tv);
String titleStr = "获取数据";
dealData.setText(titleStr);
getFileData();
}
private void getFileData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
String fileName = FileUtils.getSdPath() + File.separator + "sharedFileData.txt";
File file = new File(fileName);
boolean parentFileFlag = true;
if (!file.getParentFile().exists()) {
parentFileFlag = file.getParentFile().mkdirs();
Log.e("共享文件", "创建文件夹是否成功: " + parentFileFlag);
}
boolean fileFlag = true;
if (!file.exists()) {
fileFlag = file.createNewFile();
Log.e("共享文件", "创建文件是否成功: " + fileFlag);
}
if (parentFileFlag && fileFlag) {
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName));
Book2 book = (Book2) inputStream.readObject();
Log.e("共享文件", "获取的数据 book: " + book);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
注意:
注意使用文件共享的数据,需要能够进行Serializable序列化。
如果Book2实现了Parcelable或者没有实现Serializable就会报如下异常:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException
网友评论