美文网首页android
IPC 使用文件共享

IPC 使用文件共享

作者: 静享时光 | 来源:发表于2020-05-02 21:20 被阅读0次

共享文件也是一种不错的进程间通信方式,两个进程通信读写同一个文件夹交换数据。
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

相关文章

网友评论

    本文标题:IPC 使用文件共享

    本文链接:https://www.haomeiwen.com/subject/foelghtx.html