0

私は asynctask を実行しています。終了したら、progressDialog を閉じ、それに応じて AlertDialog を呼び出します。

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Test")
    .setCancelable(false)
    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {

    }
});
AlertDialog alert = builder.create();
alert.show();

アプリでスタンバイ

  1. アプリでスタンバイ
  2. 進行中の非同期タスク
  3. Asynctask が終了し、progressDialog が閉じられます
  4. (まだアプリで待機中) AlertDialog が正常に表示される

ホーム画面

  1. 進行中の非同期タスク
  2. ホーム画面に移動
  3. Asynctask が終了し、progressDialog が閉じられます
  4. AlertDialog が呼び出されて表示されます
  5. アプリに戻りますが、アラート ダイアログが表示されず、代わりに灰色の画面が表示されます。

これを解決する方法はありますか?私はそれを検索しようとしましたが、誰かが同じ問題を抱えていることを見つけることができませんでした..

4

2 に答える 2

1

Ok。(あなたのコメントから)。

アプリがバックグラウンドにある間、ダイアログを自動的に表示することはできません。アクティビティが表示されない場合、ダイアログもダイアログも表示されない場合、ダイアログはアクティビティのコンテキスト内で (ウィンドウ マネージャーと共に) 表示されます。

アクティビティがバックグラウンドにある間にコンテンツを表示するには、いくつかのオプションがありますが、どれも簡単ではありません.

  1. ビューを直接 Android のWindowManager. これはダイアログでは機能しません。ダイアログ レイアウトを作成して手動でアタッチする必要があります。それは他の何よりも前面に表示されたままになります。

  2. 透明なアクティビティからダイアログを起動します。ここでの問題は、ホームスクリーンで透明なアクティビティ/ダイアログが起動し、アプリケーションを呼び出すと、透明なアクティビティ/ダイアログがバックグラウンドに消えてしまうことです。

  3. ダイアログ テーマでアクティビティを起動します。スタックを正しく維持してメインアプリケーションを呼び出すと、これは必要に応じて機能する可能性があります。確認するためにテストする必要があります。

于 2013-09-13T13:42:26.460 に答える
0

Android デザイン ガイドによると、AsyncTask が終了し、アクティビティがバックグラウンド (一時停止) になったときに、AlertDialog の代わりに通知を表示する必要があります。何を表示するかを決定するには、アクティビティでブール変数を維持します。で変数を true に設定し、Activity.onResume()で false に設定しますActivity.onPaused()

基本的に、あなたはあなたの中に実装onPostExecuteしますAsyncTask。そこで、ProgressBar を非表示にし、質問に表示するコードを含むアラート ダイアログを表示します。

についての詳細AsyncTaskこちら

についての詳細Notificationsこちら

問題のデザイン ガイドはこちらです。[ユーザーへの通知の送信] まで下にスクロールします。基本的に、バックグラウンドで AsyncTask を使用して行うことは、サービスを実行するようなものです。少なくともユーザー エクスペリエンスの観点からは。アプローチとサービスの違いは内部的なものです。たとえば、Android は、異なるスペースが必要な場合にプロセスを強制終了します。

于 2013-09-13T13:48:13.433 に答える