我在最新的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
接口所需的契约。PipeDataWriter
和openPipeHelper()
是API 11级的新功能。以前,您必须滚动自己的解决方案来分叉线程以返回文件的内容。