之前已经以不同的方式提出了这个问题,但是我还没有找到一个可行的解决方案。我认为该问题与启动活动的意图标志有关,但是添加所有可能的解决方案后,问题仍然存在。最初,no_histroy和clear_top就足够了,但不再起作用,并且有/没有上述内容的new_task或clear_task也不起作用。
在现有的生产应用中,用户可以对本地pdf文件进行recyclerview。当他们在recyclerview中点击一个时,我们调用方法showPdf()参见代码段。到目前为止,退一步进入堆栈工作正常。然后,在与recyclerview相同的片段上,用户可以下载更多pdf文件。此按钮将移至另一个片段,即Web视图。附加到WebView的是一个JS接口类,它将处理WebView中的操作,下载和显示pdf就是其中之一。因此,用户下载了该pdf文件,并且使用了相同的showPdf()方法。用户使用返回按钮返回到WebView。用户再次按回去,这应该返回到recyclerview片段,但是它返回到从原始recyclerview项点击开始的活动。看到线框中的流,按照绿色->橙色->红色。
public void showPdf(Uri path) {
AppLog.d(TAG, "-> showPdf()");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
if (getContext().getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
getContext().startActivity(intent);
} else {
displayAlert(getResources().getString(R.string.error_no_pdf_viewer_title),
getResources().getString(R.string.error_no_pdf_viewer_body),
null,
null);
}
}
这些意图标志仍然是从堆栈中删除活动或启动新任务并在弹出堆栈时摆脱该任务的有效方法。