3

これがシナリオです。アプリケーションには2つのアクティビティがあり、アプリケーションによって作成された通知をクリックすると開始されるダイアログアクティビティがあります。問題は、通知をクリックすると、ホームボタンを押して停止した場合、ダイアログのみが表示され、アプリの他のアクティビティは表示されないことです。

戻るボタンを押してアプリケーションを閉じると、ダイアログアクティビティにダイアログが表示されますが、アプリケーションがバックグラウンドで実行されている場合、そのアクティビティはダイアログアクティビティの作成時にも開きます。

@android:style/Theme.Dialogダイアログアクティビティに使用します。

バックグラウンドの他のアクティビティではなく、ダイアログアクティビティのみを表示するにはどうすればよいですか?

4

3 に答える 3

2

OPの問題の解決策は、マニフェストでそのアクティビティに異なるタスクアフィニティを設定することです。

<activity android:name="MyIndependentActivity"
android:theme="@android:style/Theme.Dialog" 
android:taskAffinity="a_unique_id">

taskAffinity文字列は、パッケージ名(com.whatever.myapp)とは異なる必要があります

また、android:excludeFromRecents = "true"を使用して、ダイアログを最近のアプリリストから非表示にします。これは、通常、ダイアログに戻る意味がないためです。

詳細:http ://developer.android.com/guide/components/tasks-and-back-stack.html#Affinities

于 2013-04-07T13:20:15.990 に答える
0

ええ、それは起こります。

Dialogのテーマを宣言すると、アクティビティのライフサイクルに影響し、前のアクティビティはonStopに入らないため、一部のAndroid関数は、ダイアログアクティビティがダイアログのように機能しているため、技術的に正しいアクティブアクティビティであると見なします。

ダイアログの背後にある前のアクティビティを「気にしない」場合の回避策の1つは、ダイアログをDialogFragmentに変更し、ダイアログのテーマをフラグメントに配置して、それを独自のアクティビティに表示することです。やります。

于 2012-07-27T09:47:38.040 に答える
0

私がこれを行った方法(そしてこれを行うための最良の方法ではありません)は、activity.onPause()メソッドとactivity.onResume()メソッドにロジックを持たせて、必要なものに基づいてアクションを実行することです。私の経験は、ダイアログをたくさん使用することよりも、個別のアクティビティとそれらの間の移行に関するものです。

setResult()を使用して、アクティビティ間で情報を渡すことができます。これにより、子アクティビティが終了することを決定した理由を理解できます。これをonResume関数と組み合わせると、親アクティビティを無効にできるはずです。

ダイアログをオーバーライドして、他のアクティビティが背後に表示されないようにするには、おそらくonPause()メソッドを使用してダイアログを半透明にします。

onStop()を使用するのは非常に面倒で、多くの場合不要であることがわかりました。これは、OSに十分なメモリがあるかどうかなどに基づいて、奇妙な時間にonStopが呼び出される可能性があるため、開発者の観点からは予期せず呼び出されるためです。ただし、私の経験では、onPauseは常に予測可能に呼び出されます。

于 2012-07-27T09:53:43.103 に答える