2

保持され、キャンセルできないがある場合DialogFragment、どのような状況で getActivity() が null を返すことができますか?

私が理解している限り、アクティビティを破棄できる唯一の方法は次のとおりです。

  1. 戻るボタン経由 - 私のダイアログはキャンセルできないので、これは起こり得ません
  2. ローテーション経由 - ダイアログが保持され、メイン スレッド コールバックが実行される前に (1 つのメイン スレッド メッセージでのアクティビティの再作成により) アクティビティが再接続されるため、これは (私が思うに) 重要ではありません。

私が持っている質問は、私はケースを見逃していますか? それとも私の仮定は間違っていますか?

4

2 に答える 2

0

あなたの質問に対する正確な答えではありませんが、DialogFragment で Handler を使用したときに null を返す getActivity() がありました。Handler に DialogFragment インスタンスへのリンクがあったとしても、 handleMessage() メソッドで getActivity() が null として残っていました。なぜそれが起こるのか聞いてうれしいです。

PSさらに奇妙なことに、このDialogFragmentが初めて作成されたときはすべて問題ありません。この DialogFragment の新しいインスタンスを作成すると、Handler の getActivity() が null を返し始めます。

新しい DialogFragment を作成している間、内部の Handler は何らかの形で古いものにまだ接続されているのではないかと思います (これは既に切り離されており、アクティビティがありません)。

私の Handler は推奨されているように静的ではないことを認めなければなりません。

PPSフラグメントにはcompat libを使用します

于 2012-09-27T13:48:25.960 に答える
0

Ok。少し考えた後、私は自分のエラーを理解したと思います。最初の DialogFragment のハンドラーがサービスに登録され、登録が解除されることはありませんでした。したがって、メッセージが来ると、このハンドラーにも入ります。まだメモリリークが発生していない場合は、メモリリークが発生する可能性があると思います:D

于 2012-09-27T14:08:32.940 に答える