0

私は OpenGL ベースのアプリを持っていますが、これまでのところすべて正常に動作しています。このアプリは、OpenGL ビューを含むメイン アクティビティと、いくつかのカットシーン用のムービー プレーヤーを含む追加アクティビティの 2 つのアクティビティから構成されます。

一部のローエンド デバイス (LG P690、Android 2.3.4 など) では、ムービー アクティビティの実行後にパフォーマンスが大幅に低下します。その後、メイン アクティビティの実行が非常に遅くなり、50 fps ではなく約 30 fps にしか達しません。

ホームボタンを押してアプリを終了し、再起動すると、再び高速になるように「修正」できます。その後、映画の視聴アクティビティが再び表示されるまでは、すべて問題ありません...

私はいくつかのテストを行いましたが、この効果は、アクティビティ #2 が実際に何を行うかに関係なく、たとえそれが単なるスプラッシュ スクリーンなどであっても発生しています。2 番目のアクティビティを呼び出さない場合、パフォーマンスは常に高くなります。

注: OpenGL アクティビティは複数回インスタンス化されないため、おそらく同様の効果が得られます。

誰かが同じまたは同様の問題を経験し、解決策を知っていますか?

4

2 に答える 2

0

2つのデバイスで同じ問題が見つかりました。

  • エイサーリキッドメタル(android 2.3)が私のapで50から45fpsに低下

  • 'cube' 10.1 "タブレット(android 4.0)-私のアプリで60から30fpsに低下

ただし、SurfaceViewをアクティビティの子として直接アタッチしたキャンバスアプローチを使用しています。

私は調査しましたdialogが、アクティビティの代わりに使用すると機能します。動作しているように見えるもう1つのことは、アクティビティのマニフェストエントリを次のように属性を持つように変更することです。

android:theme="@android:style/Theme.Dialog"

注意:これらの手法のいずれかを使用すると問題は解決しますが、呼び出しアクティビティのライフサイクルイベントは以前のようには機能しません。つまり、onPauseは呼び出されません。カスタムコードをこれらのメソッドからダイアログを開くコードに移動する必要があります。

これは、発見してデバッグするのに本当に苦労しました。この問題が存在しなかったらいいのにと思います。

于 2012-06-12T14:28:50.127 に答える
0

残念ながら、コメントを残すだけの評判がありません。

2番目から戻ったときに、openglアクティビティの新しいインスタンスが開始されると想像できます。

それを避けるために、特定の意図を入れたいと思うかもしれません。

たとえば、FLAG_ACTIVITY_CLEAR_TOP を試してみます。

インテントの開発者ページをご覧ください: http://developer.android.com/reference/android/content/Intent.html

すべてのフラグが説明とともに一覧表示されます。

それがあなたのための解決策につながることを願っています!

于 2012-05-12T16:51:27.993 に答える