AsyncTaskでアクションを開始すると、ProgressDialog UIがフリーズする問題が発生しています。 私のバックグラウンドタスクは2つの部分で構成されているので、私の問題は他の同様の質問とは多少異なります。 - 最初の部分(loadDB())はデータベースアクセスに関連しています - 2番目の部分(buildTree() ListViewの内容を構築し、runOnUiThreadコールで起動しますAsyncTask内のProgressDialogが更新されない
進行状況ダイアログは、タスクの最初の部分で正しく更新されますが、2dn部分では更新されません。 私はAsyncTaskのonPostExecuteでbuildTreeの部分を移動しようとしましたが、コードのこの部分がまだ作業が完了するまで一時的にフリーズするようになっています。私が使用する外部コードに基づいているので、私はbuildTreeの部分をゼロから再コード化できません。
これを解決するためのヒントを教えてください。画面上のいくつかのダイアログを強制的に更新する方法はありますか?
コードはここに行く:
public class TreePane extends Activity {
private ProgressDialog progDialog = null;
public void onCreate(Bundle savedInstanceState) {
// first setup UI here
...
//now do the lengthy operation
new LoaderTask().execute();
}
protected class LoaderTask extends AsyncTask<Void, Integer, Void>
{
protected void onPreExecute() {
progDialog = new ProgressDialog(TreePane.this);
progDialog.setMessage("Loading data...");
progDialog.show();
}
protected void onPostExecute(final Void unused) {
if (progDialog.isShowing()) {
progDialog.dismiss();
}
}
protected void onProgressUpdate(Integer... progress) {
//progDialog.setProgress(progress[0]);
}
protected Void doInBackground(final Void... unused)
{
//this part does not block progress, that's OK
loadDB();
publishProgress(0);
//long UI thread operation here, blocks progress!!!!
runOnUiThread(new Runnable() {
public void run() {
buildTree();
}
});
return null;
}
}
public void buildTree()
{
//build list view within for loop
int nCnt = getCountHere();
for(int =0; i<nCnt; i++)
{
progDialog.setProgress(0);
//add tree item here
}
}
}
が、おかげでこれをしようとします。 – user1099994
あなたの問題が解決したら、答えを受け入れることを忘れないでください! –
ちょうどテストされ、美しく動作します。お二人のおかげです。 – user1099994