我写了下面的代码,当用户单击“附加”按钮以选择照片时。
下面是相同的代码。
Intent intent = new Intent();
intent.setType("*/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(Intent.createChooser(intent, "Select file to upload "), 1);
下面是OnActivityResult的代码
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (null != data) { // checking empty selection
if (null != data.getClipData()) { // checking multiple selection or not
for (int i = 0; i < data.getClipData().getItemCount(); i++) {
Uri uri = data.getClipData().getItemAt(i).getUri();
Log.i(TAG, "Path" + getPath(uri));
filespath.add(getPath(uri));
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(getPath(uri), options);
bitmaps.add(bitmap);
}
} else {
Uri uri = data.getData();
}
}
}
}
现在用户可以选择多张照片,我意识到当照片超过10张时,我会警告主线程完成了太多工作。当用户在选择照片后单击“完成”按钮时,我具有“回收站”视图,其中显示了用户在最终上传之前选择的图像的缩略图。
现在的问题是,当用户单击“完成”并显示“缩略图”时,如何显示ProgressDialog,处理冻结屏幕并避免在主线程上完成警告工作。
答案 0 :(得分:1)
要使解析和加载工作脱离主线程,您可以将所有内容包装在AsyncTask中。鉴于显示的代码很少,我不知道上面的功能是做什么的,因此可能需要稍作调整。移动所有解析逻辑等,以便在后台执行如下操作:
AsyncTask<Void, Void, List<Bitmap>>() {
@Override
protected void onPreExecute()
{
//show progress dialog
//Are you trying to prevent the user from clicking on the UI while updating?
//You can do something such as:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
@Override
protected List<Bitmap> doInBackground(Void... voids) {
//perform the logic, this will return a list of all the Bitmaps to onPostExecute
//Do NOT perform any ui logic here.
}
@Override
protected void onPostExecute(List<Bitmap> bitmaps) {
//cancel progress dialog.
//Update the UI with the response.
//Clear the window lock:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
};