美文网首页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