2011-12-03 9 views
5

アニメーションを作成するために、70個程度のイメージを配列に保存してアニメーションを表示し、それを1つずつ表示するライブ壁紙を作成しました。私はCubeEngineの構造を使って設計しました。ほとんどの場合、それは機能します。ライブ壁紙 - "壁紙を設定する" - メモリをクリアするために使用するイベントが必要

最初に壁紙を選択すると、配列がロードされ、アニメーションが表示されます。それから私が "壁紙の設定"ボタンをクリックすると、 "OutOfMemoryError:ビットマップサイズがVM予算を超えています"というメッセージが表示されます。これを解決するためにbitmap.recycle()呼び出しを追加しました。

すべてのイベントにLog.dを入れて、イベントの流れを理解しようとしました。 「壁紙の設定」ボタンをタップすると、コンストーラーに直接向かいます。

onDestroyイベントまたはonSurfaceChangedイベントはトリガーされず、onTouchEventを除く他のイベントもトリガーされません。

イメージの元の配列はメモリ内にあり、コンストラクタを実行すると、イメージとともに別の配列をロードしようとし、メモリが不足します。

「壁紙の設定」ボタンをクリックしたときに元のアレイを消去するためのロジックを入れるイベントが見つかりません。

「壁紙の設定」ボタンにロジックを追加する方法はありますか、これを行うことができるはずのコードに他のイベントを追加できますか?

他にもこの問題がありますが、解決策は見当たりませんでした。

ご意見をお寄せください。

答えて

0

ロードまたはアンロードを実行する場合は、onVisibilityChanged(boolean visible)をオーバーライドすることによってWallpaperService.Engineの可視性がいつ変化するかを検出できます。
可視性が変更された場合は、GlSurfaceViewを再開または一時停止する必要があります。

あなたがここでより多くの情報を見つけることができます:
http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged(boolean)
http://developer.android.com/reference/android/opengl/GLSurfaceView.html
活動ライフサイクル

を参照
関連する問題