2016-05-19 1 views
1

ViewGroupを拡張して簡単なカスタムレイアウトを作成しました。 init()ButtonPopupMenuを作成します。ボタンが押されると、PopupMenuが表示されます。問題は、PopupMenuが表示されているときにデバイスを回転すると、次のエラーメッセージが表示されることです。PopupMenuが表示されている間に回転すると、android.view.WindowLeakedを取得します

E /ウィンドウマネージャは:android.view.WindowLeaked:活動 は...... {c44e7daはVE ..... android.widget.PopupWindow $ PopupDecorView ID 0,0-392,960をウィンドウ を漏洩しました}もともとここ

添加したことを、私は同様の質問(PopupMenu PopupWindow$PopupViewContainer leak)を発見した、そしてこの溶液をPopupMenuonStop()dismiss()を呼んでいました。ただし、これはアクティビティではなく、ViewGroupなので、onStop()はありません。そこで、同様の名前のイベントを見つけようとしたところ、onDetachedFromWindow()が見つかりました。私はにdismiss()と呼んだ。

onDetachedFromWindow()スクリーンローテーションの前に呼び出されますが、まだWindowLeakedエラーメッセージが表示されます。

どうすればこの問題を解決できますか?実際には、それはアプリケーションが正常に動作し、私が得るすべてがログにエラーメッセージです。このエラーは無視できますか?

+0

解決策は見つかりましたか? – Renjith

答えて

0

おそらくこの回答はあなたにとっては遅すぎますが、他の誰かが興味を持っている場合に私が見つけたものを分かち合います。 PopupMenuは内部でPopupWindowを使用します。 PopupMenu.dismiss()に電話するとPopupWindow.dismiss()が呼び出されますが、終了遷移が指定されている場合はPopupWindowを無効にすることは即時ではありません。適切な時刻にdismiss()と呼んでも、ウィンドウは実際には階層から十分に速く削除されません。あなたの活動が破壊される前に、この漏れエラーを起こさないためには、それを除去する必要があります。すぐにPopupMenuを却下する手段はありません。可能な回避策は、PopupMenuの代わりにPopupWindowを直接使用し、解読する前にsetExitTransition(null)に電話することです。

+0

PopupWindowからポップアップメニューを最初から実装することは、多くの作業のようです。例外メッセージが表示されても、それには目立った影響はありませんでした。だから私の質問は、私がこれを無視できるかどうかです。名前に「リーク」が含まれているため、この例外が発生した場合にメモリが再利用されない場合、これは意味しますか? –

+0

さて、私はそれを無視することにしました。それはAPI23より前の古いAndroidバージョンでは起こりそうにないようだ。私はGoogleがすぐにそれを修正することを望んでいる。 – itotsev

関連する問題