gpt4 book ai didi

java - Android - finish() 方法上的 StartActivityForResult 卡住 UI

转载 作者:行者123 更新时间:2023-12-01 09:40:57 25 4
gpt4 key购买 nike

我有以下情况:

  1. Activity A 使用 startActivityForResult 启动 Activity B
  2. 然后, Activity B 通过使用 finish() 将字符串的 ArrayList 返回给 Activity A。

下面是 Activity B 的具体功能的代码示例:

ArrayList<String> urls = new ArrayList<>();
urls.add("Some string");

Intent intent = new Intent();
intent.putStringArrayListExtra(KEY, urls);
setResult(Activity.RESULT_OK, intent);
finish();

然后Activity A在onActivityResult(...)中接收数据

我遇到的问题是,当用户点击完成按钮并且执行 Activity B 的代码示例时,Activity B 卡住大约 3 秒(当我在 ArrayList 中有大约 2 个字符串时)。 ArrayList 中的字符串越多,卡住的时间就越长。我或多或少确定是 finish() 导致 UI 线程卡住。

有没有办法在不卡住 Activity B 的情况下调用finish()?如果不是,为什么会发生这种情况?

编辑:这是完整的示例:

   /**
* Background task
*/
private class gatherUrlsTask extends AsyncTask<ArrayList<PictureEntry>, Integer, Intent> {

@Override
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
bt_done.setVisibility(View.GONE);
fab_add_picture.setVisibility(View.GONE);
}

@SafeVarargs
@Override
protected final Intent doInBackground(ArrayList<PictureEntry>... params) {
ArrayList<String> imagePaths = new ArrayList<>();

for (PictureEntry pictureEntry : params[0]) {
if (pictureEntry.isSelected()) {
imagePaths.add(pictureEntry.getPath());
}
}

if (imagePaths.size() == 0) {
Toast.makeText(getApplicationContext(), R.string.please_select_atleast_one_image, Toast.LENGTH_LONG).show();
return null;
} else {
Intent intent = new Intent();
intent.putStringArrayListExtra(SELECTED_IMAGES_KEY, imagePaths);
return intent;
}
}

@Override
protected void onPostExecute(Intent intent) {
setResult(Activity.RESULT_OK, intent);
finish();
}
}

但是我可以从 AsyncTask 中删除所有内容,因为它对性能没有任何影响。

最佳答案

我不知道是什么原因,但为了防止用户界面被卡住,使用 asyncTask 然后在 onPostExecute 调用 finish()

关于java - Android - finish() 方法上的 StartActivityForResult 卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38458702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com