【发布时间】:2019-08-02 06:16:18
【问题描述】:
在我的应用程序中,我使用存储访问框架在 sd 卡上写入文件。 为此,我正在打开文档树的意图并在活动结果内部 我正在接收 sd 卡路径的文档 URI。
返回活动结果后,我得到了这个文档 URI,然后我正在执行一项巨大的任务,该任务以黑屏结束,因为 UI 线程上的负载很大。 这个黑屏会出现 7 到 8 秒。
我确实通过使用异步任务解决了黑屏问题,但由于异步任务仍然会出现其他问题。 不是出现黑屏活动屏幕,但在返回活动屏幕时,UI 进度加载器出现跳帧问题,在预执行异步任务时,UI 加载器跳帧 2 秒,然后工作正常。我想减少跳帧以及在后台方法中执行的异步任务我已经转移了这个超过时间限制并在大约 1 分钟内结束的巨大任务。在没有异步任务的情况下,黑屏的巨大任务在主线程上几乎花费了 8 秒。
黑屏代码
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);
startActivityForResult(intent, 77);
在活动结果中执行一项巨大的任务
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
sdCardUri = data.getData();
if(requestCode == 77) {
documentFile = DocumentFile.fromTreeUri(this, sdCardUri);
//.... HERE ALOT OF TASK IS BEING PERFORMED AND AS IT IS RETURNING BACK TO ACTIVITY THE MAIN THREAD ENDS IN BLACK SCREEN .....
HugeTaskPerformed(documentFile);
}
使用异步任务后
if (resultCode == Activity.RESULT_OK) {
sdCardUri = data.getData();
if(requestCode == 77) {
documentFile = DocumentFile.fromTreeUri(this, sdCardUri);
// instead of huge task performing async task here
new MainActivity.BackgroundHugeTask(context).execute();
}
}
我应该如何让异步在后台工作更快,并且在预执行加载程序时跳过 2 秒然后相应地工作是一团糟我可以做些什么来尽可能减少它们?
不能给你完整的代码,但给你一个我卡在哪里的示例。
【问题讨论】:
标签: android android-asynctask fullscreen onactivityresult