這是我的應用程序的流程:顯示ProgressDialog直到的AsyncTask完成,然後更新UI
1)用戶需要的圖片或視頻
2)將培養基保存在內部存儲器
3)的路徑被分配給該UI被更新,以指示用戶可以繼續
的UI更新只有如果C的自定義對象
4) ustom對象具有圖像路徑或視頻路徑。我剛開始使用AsyncTask
在後臺線程中保存到內部存儲器,這樣在保存大文件時應用程序不會掛起,但我遇到了一些問題。
我想要做的:顯示ProgressDialog
直到doInBackground()
完成,那麼路徑分配給我的對象,然後繼續主線程上更新UI。
現在,主線程將繼續運行,而AsyncTask
仍在工作,並且UI將不會正確更新,因爲路徑尚未分配給對象。
我已閱讀約AsyncTask#get()
,但我不確定如何使用ProgressDialog
來實現它。我嘗試了,主線程在繼續之前似乎沒有等待結果。
我非常感謝任何幫助。謝謝!
我AsyncTask
:
private class SaveMediaTask extends AsyncTask<Integer, Void, String>
{
private ProgressDialog progressDialog;
private int mediaType;
public SaveMediaTask()
{
progressDialog = new ProgressDialog(getActivity(), ProgressDialog.THEME_HOLO_LIGHT);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.progressDialog.setTitle("Processing");
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
this.progressDialog.show();
}
protected String doInBackground(Integer... mediaType)
{
//save to internal storage and return the path
return path;
}
protected void onPostExecute(String path)
{
//by the time this runs, the UI has already tried to update itself on the main thread,
//and found that myObject does not yet have a path. Once this runs, it is too late.
myObject.setPath(path);
if (progressDialog.isShowing())
{
progressDialog.dismiss();
}
}
}
我怎麼稱呼它,用戶離開照相機後立即:
new SaveMediaTask().execute(MEDIA_TYPE_IMAGE);
//WAIT HERE AND DISPLAY PROGRESSDIALOG UNTIL TASK IS DONE
//update UI
你的任務,我不能真正得到你想要的東西,但這個答案吧[這裏]( http://stackoverflow.com/questions/27499292/cant-show-alertdialog-in-doinbackground/27500068#27500068)會告訴你如何構建你的asynctask,同時注意你的代碼需求,我不認爲你需要檢查直接從主線程的路徑,我在想asynctask有辦法可以到達用戶界面,所以用它來檢查你的對象路徑,如果它真正的調用postexecute並做你的東西,希望它有幫助 – Elltz