0

これは、確実に再現するのにかなり時間がかかった奇妙な問題です。

非常に単純なメニュー アクティビティがあります。xml で定義されたいくつかのボタンだけです。

GLSurfaceView と xml で定義されたいくつかのボタンを含むレイアウトのアクティビティがあります。これらのボタンには onClick 属性が定義されています。このアクティビティには、メニュー アクティビティからアクセスします。

OpenGL アクティビティには、関連する onClick 関数「onFoo(ビュー ビュー)」があります。

ネイティブの [戻る] ボタンを使用してメニュー アクティビティに戻ると、興味深いことは何も起こりません。ただし、onClick 属性を持つ xml で定義されたボタンのいずれかをクリックしてから戻ると、メニュー アクティビティの ImageView の一部が黒く表示されますが、それ以外の場合は正しい場所、サイズなどで表示されます。それらの xml で定義された onClick 関数も正しく機能します。 .

メニュー アクティビティのすべての画像を再エクスポートしています (アセットが最初にさまざまな時点でエクスポートされたため、エクスポート設定の欠陥を排除するため)。以前の問題。

この問題の変数を制限する目的で、OpenGL アクティビティの関数の内容をコメントアウトして、onClick 関数で競合が発生していないことを確認しました。

例えば

public void onMainMenu (ビュー ビュー) { }

したがって、明確にするために、上記の空のメソッドで android:onClick="onMainMenu" などの onClick 属性を持つ xml で定義されたボタンをクリックすると、ネイティブの戻るボタンを押すと問題が発生しますが、onMainMenu のクリックをスキップした場合は発生しません。ボタン。

黒くなるのが常に同じ ImageView のセットであるかどうかはわかりませんが、1 つの ImageView は正しい Drawable で一貫して存続しているようです。ImageView は src 属性以外は同じように定義されているため、これは奇妙です。それらはすべて比較的同じサイズであり、まったく大きくありません。

私はもともとそれがEGLコンテキストと関係があると思っていました(AndroidはopenGLコンテキストを開いた後、描画可能な画像の代わりに黒い四角形を表示します)(それでもそうかもしれません)が、その後、それを100%再現する方法を発見しました後方に移動する前に、onClick 属性を持つボタンを押します。メモリ使用量は制御されており、考えられる解決策または解決策を見つけることができません。

これは、私が持っている 3 つのデバイス (HTC One、Droid Bionic、Galaxy Tab 2 7) で再現できます。

アプリケーションは minSdk:14、ターゲット:17 です。ハードウェア アクセラレーションがオンになっています。

ハードウェアアクセラレーション設定を試してみたところ、次の結果が得られました。

アプリケーションのハードウェア アクセラレーションをオフにして OpenGl アクティビティだけに追加すると、メイン メニューの問題は発生しませんが、OpenGL アクティビティで同じ問題が発生し始めます。このアクティビティの場合、ImageView のドローアブル リソースの一部が実行時に切り替えられます。切り替えられたリソースは正しく表示されますが、xml でその ImageView に対して定義された同じリソースに切り替えると、黒くレンダリングされます。

切り替えを明確にするために: そのようなケースの 1 つで、背景用の drawable-state-selector を持つビューがあります。2 つの状態を切り替えると (これらはタブのように機能します。つまり、xml で定義されている既定の状態は反対です)、既定の状態は常に黒で表示されますが、2 番目の状態は正しく表示されます。

アプリケーションと OpenGL アクティビティのハードウェア アクセラレーションをオフにすると、問題は完全に解消されたように見えます。

テストする必要のないデバイスで発生する可能性のあるパフォーマンスの問題については確信が持てないため、それを解決策として使用することを心配しています.

OpenGL アクティビティからハードウェア アクセラレーションを削除すると、少なくとも Droid Bionic で GLSurfaceView をオーバーレイするビューが壊れるため、この疑似ソリューションは使用したくありません。

Stack Overflow に質問を投稿するのはこれが初めてです。私はいつも確かな手がかりを探していますが、この場合、同様の状況で解決策や問題さえ見つけることができませんでした.

コミュニティが提供できる助けと知恵に感謝します!

4

1 に答える 1