2016-10-12 14 views
1

APIレベル8のデバイスで実行中のアプリケーションA &が2つあるとします。Android ProgressDialogが別のアプリケーションの実行後に表示されなくなった

Aから、長時間実行されている解凍プロセスを開始するアクティビティを開始します(約4ギガバイト)。これの進行状況をProgressDialogに示します。

一方、手動アクションでは、アクションによってBが応答し、ProgressDialogでアクティビティを画面から離します(onStopが呼び出されます)。 私はいくつかのアクションを実行し、完了したらBのアクティビティを隠します。 Aのアクティビティが画面に表示されるようにします(onResumeが呼び出されます)。

しかし、長時間実行中のプロセスがまだ実行中であっても、ProgressDialogはなくなりました。 OnStopが呼び出された後に私のProgressDialogが消えてしまったのですが、なぜOnResumeに戻ってこないのですか?


おそらく、アクティビティのコンテキストが変更されているので、アクティビティのコンテキストで呼び出されたProgressDialogも同様に行っています。しかし、長時間実行されているプロセスはまだ実行中であり、正常に動作しているので、ProgressDialogの同じインスタンスも取得できるはずです。 しかし、.show()を呼び出すだけでは機能しません。

機能が1つのアプリケーション内でうまく機能していることに注意してください。 2つのアプリケーションがお互いに戦っているのは純粋に問題です。

答えて

0

システムがDialogFragmentを使用する必要があるダイアログをリストアする場合は、ダイアログだけで状態の復元を行うことはできません。

+0

これは、APIレベル8のデバイスを引き続き受け入れることができないためです(私に理由を聞かないでください...)。質問を調整しました。 –

+0

次にOnSaveInstanceStateでダイアログが表示されているかどうかをチェックし、もしそのブール値がバンドルに保存されていれば、OnCreate/onRestoreInstanceStateがそのブール値を読み込んでダイアログを再作成する必要があります。また、メモリリークを避けるために、onPauseのダイアログを非表示にしてonResumeに表示します。 – Scrotos

+0

OnCreate/onRestoreInstanceStateがトリガーされないため、動作しません。アクティビティはゼロから構築されていません。 –

0

あなたは解凍プロセスからブロードキャストを送信できます。アクティビティでは、進行状況のダイアログを表示するブロードキャスト受信者を登録します。

ダイアログフラグメントアプローチに行きたい場合は、以前のAndroidのバージョン

またはちょうどとの下位互換性があるsupport libraryを使用することができるような活動のライフサイクルに応じて、あなたのダイアログを隠す:

public class MainActivity extends Activity { 

private ProgressDialog mDialog; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
mDialog=new ProgressDialog(this); 

} 
@Override 
    protected void onResume() { 
     super.onResume(); 
     mDialog.show(); 
    } 
@Override 
    protected void onStop() { 
     super.onStop(); 
     mDialog.hide(); 
    } 
@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if(mDialog!=null){ 
      mDialog.dismiss(); 
     } 
    } 
} 
+0

mm、私はそれについてまだ考えていませんでした。地方放送は、私が適切に必要とする進歩をもたらすことができます。私はそれを試してみましょう。 –

+0

私はこの解決策に似た問題を抱えています。 progressDialogはまだ存在すると主張し、それは画面上でisShowing()と主張します。サポートライブラリを追加することもオプションではありません。なぜなら、現在のソリューションの古い邪悪なプログラミングスタイル(私の大きな後悔)にとどまっていなければならないからです。 progressdialogの文脈は私がそれをどちらかと比較しているものと一致していないようです。進行中のダイアログが表示されているように見えるが、古い再開されたアクティビティによってカバーされる。それを再びフォアグラウンドに見せようとしてはいけませんか?私はまだこれまでにできませんでした... –

+0

更新された回答のアプローチはどうですか? –

関連する問題