2011-12-10 15 views
0

私が書いているライブ壁紙アプリケーションでいくつかの問題が発生しています。Android:ライブ壁紙アプリケーションのパフォーマンス 'hickups'

私はレンダリングにOpenGL 1.0を使用しています。一般的に、私が得ているパフォーマンスはまともです。 Samsung Galaxy S2(2.3.4)では、フレーム制限なしで60 FPSを得ることができます。

しかし、時々私は他のフレームよりかなり大きいフレームを取得します(通常のフレームは33ms、スパイクフレームは約70-100msです)。これは定期的な間隔で、毎秒約1回発生します。

私のコードはすべてのフレームで全く同じ処理を行います。したがって、この動作は異常です。私のスレッドが何らかの理由でOSによってスワップ/遅延されているように見えるか、またはVMがちょっと遅く実行を開始するように見えます。

eglSwapBuffersが待つことはないので、減速はGPU処理によるものではありません。また、私のループで短命のオブジェクト(DDMS割り当てトラッカーで検証済み)を持たないようにしているので、自分のプロセスがGCを実行させないことも確かです。

興味深いのは、私が画面上に指を置くと、フレーム時間のスパイクがかなり小さくなる傾向があるということです。あたかもOSがこれのためにプロセスの優先順位を上げるかのように。

スパイクが発生したときに私のアニメーションが非常に悪く見えるので、この問題を解決することは非常に重要です。

他の誰かが同じ問題を経験しましたか?問題の原因となる可能性のあるヒントについては、大いに感謝しています。

答えて

0

あなたが正しいと思われます。ライブ壁紙として、あなたは唯一のアクティブなスレッドであることは期待されていないので、別のアプリケーションがそのことを行う必要があるときは、遅延が発生します。私が知る限り、これをコントロールすることはできません。私のアプリケーションの1つでは、電子メールを受け取ったときに悪化し、半分の凍結が得られます。あなたのケースでは、の定期的な間隔であるは、別のプロセスが毎秒何かをチェックしていると思うように私に導いてくれます。場合によっては、logcatにヒントが表示され、毎回繰り返されるプロセスが表示されることがあります。

私はこれのための解決策はありませんが、(アニメーションの性質に応じて - これはあなたのタイムステップとして各フレームを使用してアニメーション化していると仮定しています。最後のフレームと現在のフレームとの間の実際の経過時間。スパイクが表示されるとアニメーションは表示されません。それは微妙ですが、時にはそれで十分かもしれません。

0

長いガベージコレクションのように聞こえるのは私に渡されます。 [編集]あなたはあなたの割り当てを削減したと言います - おそらくスパイクを引き起こしている別のアプリやライブラリがありますか?

スレッドのコンテキスト切り替えが行われますが、CPU使用量の限界(CPU使用量がフレームあたり16ミリ秒)に非常に近い場合を除き、問題は発生しません。現時点では、GPUフレームバッファのスイッチング周波数(最大60秒間の最大値)によってほぼ確実に制限されています。

ライブ壁紙には、更新頻度を15fpsに制限するオプションがあります。バッテリーの消耗は、ライブ壁紙のために真剣に検討する必要がある要素です。

関連する問題