我在最新的android记事本教程link中找到了这个代码片段,该教程使用contentprovider并实现pipedatawriter。
接口的方法writeDataOppe是这样实现的:

@Override
public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String mimeType, Bundle opts, Cursor c) {
    // We currently only support conversion-to-text from a single note entry,
    // so no need for cursor data type checking here.
    FileOutputStream fout = new FileOutputStream(output.getFileDescriptor());
    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new OutputStreamWriter(fout, "UTF-8"));
        pw.println(c.getString(READ_NOTE_TITLE_INDEX));
        pw.println("");
        pw.println(c.getString(READ_NOTE_NOTE_INDEX));
    } catch (UnsupportedEncodingException e) {
        Log.w(TAG, "Ooops", e);
    } finally {
        c.close();
        if (pw != null) {
            pw.flush();
        }
        try {
            fout.close();
        } catch (IOException e) {
        }
    }
}

我的疑问是,他们为什么特别使用pipedatawriter?
这是某种设计模式吗?
我没有找到其他的来源。为什么?

最佳答案

为什么他们特别使用pipedatawriter?
他们正在使用openPipeHelper()来实现openTypedAssetFile()openPipeHelper()将aPipeDataWriter作为参数。在他们的例子中,他们在PipeDataWriter本身上实现了NotePadProvider,因此需要实现openPipeHelper(),以实现PipeDataWriter接口所需的契约。
PipeDataWriteropenPipeHelper()是API 11级的新功能。以前,您必须滚动自己的解决方案来分叉线程以返回文件的内容。

07-22 13:06