アンドロイドアプリケーションの作成中古いデバイスでは遅くなるコードがたくさんあります。すべてのinitコードが実行されている間にprogressdialogの表示をしたい。 onCreateから呼び出されるとダイアログが表示されません。したがって、AsyncTaskに入る必要があります。show progressdialog asyctaskに表示されていません
これは私の仕事です。
class startupTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
pd = new ProgressDialog(mainContext);
pd.setMessage("Starting up. Please wait...");
pd.setIndeterminate(true);
pd.setCancelable(false);
pd.show();
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
pd.show();
runInit();
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
if (pd != null) {
pd.dismiss();
}
super.onPostExecute(result);
}
}
でも、ダイアログは表示されませんか? runInitは通常のスロースタートアップコードです。 UI上で実行する必要があります。
私がpd.dismiss呼び出しを削除した場合、initコードが完了すると進捗ダイアログが表示されるので、表示されずにOKが作成されます。
上記のコードは正しい方法ですが、onCreateから呼び出されたときにはうまくいかないでしょうか?
表示するように呼び出した後にダイアログを表示する方法はありますか?どのようにしても、ダイアログが表示され、表示されるまで待ってから続行することができます。
ありがとうございました。
EDIT:私はちょうど弾丸を噛んでコードを再構成して、ゆっくりとした非UIコードだけがAsyncTaskの中に入るようにしなければなりませんでした。これでうまくいきました。
は、なぜあなたは)( 'pd.showを呼び出している;' 'doInBackground'に? – Sharj
ダイアログの表示を試みるだけです。それは助けになりませんでした。 – Some1Else
あなたの問題は、 "runInitは通常の低速スタートアップコードです"というステートメントにあり、UIで実行する必要があります。これはasynctaskの目的を破るもので、asynctaskはUIスレッドから取り除かれます。 runInit()が何をしているのかを記述し、誰かがUIスレッドの外でそれを行う方法を見つけるのを助けることができます。 – alzee