我有以下情况:
ArrayList
将finish()
字符串返回到活动A. 以下是活动B的作用的代码示例:
ArrayList<String> urls = new ArrayList<>();
urls.add("Some string");
Intent intent = new Intent();
intent.putStringArrayListExtra(KEY, urls);
setResult(Activity.RESULT_OK, intent);
finish();
然后,活动A接收onActivityResult(...)
我遇到的问题是当用户点击完成按钮并且活动B的代码示例执行时,活动B冻结约3秒(当我在ArrayList
中有大约2个字符串时)。我ArrayList
中的字符串越多,冻结的时间就越长。我或多或少地确定导致UI线程冻结的是finish()
。
有没有办法在没有冻结活动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中的所有内容,因为它对性能没有任何影响。
答案 0 :(得分:1)
我不知道原因是什么,但是为了防止ui被冻结,请使用asyncTask然后在onPostExcecute调用finish()