使用Android Dropbox SDK时,是否有人知道在getFile调用启动后取消下载的最佳方法。目前,我的AsyncTask类执行以下操作:
@Override
protected O2ShellFileManagerError doInBackground(File... params) {
if (params[0] == null) {
return new O2ShellFileManagerError(
"No File found.",
O2ShellErrorCode._o2sfm_ec_unknown);
}
File mFile = params[0];
try {
DropboxAPI<AndroidAuthSession> mDBApi = O2DropboxStorage
.getDropboxSession(mContext);
// mOutputStream is class level field.
mOutputStream = new FileOutputStream(mFile);
DropboxFileInfo info = mDBApi.getFile(mDropboxPath, null,
mOutputStream, new ProgressListener() {
@Override
public void onProgress(long bytes, long total) {
if (!isCancelled())
publishProgress(bytes, total);
else {
if (mOutputStream != null) {
try {
mOutputStream.close();
} catch (IOException e) {
}
}
}
}
});
} catch (DropboxException e) {
Log.e("DbExampleLog",
"Something went wrong while getting file.");
} catch (FileNotFoundException e) {
Log.e("DbExampleLog", "File not found.");
} finally {
if (mOutputStream != null) {
try {
mOutputStream.close();
mOutputStream = null;
} catch (IOException e) {
}
}
}
/*
* The task succeeded
*/
return null;
}
所以我上面的解决方法基本上关闭了生成DropboxException的OnProgess方法中的mOutputStream。有比这更好/更清洁的方式吗?
答案 0 :(得分:1)
使用getFileStream API获取DropboxInputStream。
public DropboxAPI.DropboxInputStream getFileStream(java.lang.String path, java.lang.String rev)
当用户取消下载时,请调用DropboxInputStream的close函数。
我认为这种方法可以完全释放资源。