2015年3月15日日曜日

スクリーンセイバー(Daydream)のメモめも

どうも上手く行かない。
処理自体は流れるものの、スクリーンセイバーが表示される時に画面が一度ちらついてしまう。

スクリーンセイバー(Daydream)は開始する時に表示されている画面からフェード効果で切り替わっているのだが、いきなり描画しているものがブレンドされずにそのまま表示されてしまう。結果としてちらつきが発生している。

サーフェースビューを追加しただけのレイアウトを設定しているのだが原因が判明できない。


エミュレータで表示させた時にはっきりと意識できるレベルで何が原因か正直わからず。

03-15 15:39:39.258  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ onAttachedToWindow()
03-15 15:39:39.417  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ surfaceCreated()
03-15 15:39:39.417  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ surfaceChanged:width=800, height=1216
03-15 15:39:39.427  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ onDreamingStarted()
03-15 15:39:40.669  15685-15685/jp.rallwell.siriuth.stardaydream D/dalvikvm﹕ GC_FOR_ALLOC freed 528K, 12% free 4620K/5212K, paused 11ms, total 12ms
03-15 15:39:42.695  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ onDreamingStopped()
03-15 15:39:42.823  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ surfaceDestroyed()
03-15 15:39:42.830  15685-15685/jp.rallwell.siriuth.stardaydream D/StarDaydream﹕ onDetachedFromWindow()
03-15 15:39:43.033  15685-15685/jp.rallwell.siriuth.stardaydream W/ManagedEGLContext﹕ doTerminate failed: EGL count is 2 but managed count is 1
03-15 15:40:00.158  15685-15685/jp.rallwell.siriuth.stardaydream D/dalvikvm﹕ GC_FOR_ALLOC freed 693K, 15% free 4530K/5288K, paused 15ms, total 16ms

ライフサイクルである流れは破綻していないので多重処理によるものかと思ってメソッドの終了もチェックしてみても問題はなさそうだった。
継承もとのメソッドを呼び出す順序を変えても処理負荷分の誤差がある程度で根本解決には至らなかった。

対処療法としてonDreamingStartedが呼び出された直後に実際の描画を行うまでに少し遅らせることで回避できた。
postDelayedで200を設定するとほぼちらつきは無くなった。
しかしながら、おそらく処理依存しているので個体によってはばらつきがあるので根本解決にはならない。
極端に遅くすると今度はフェード処理が行われずちらつきはしないもののブレンド処理がないままいきなり切り替わってしまう。

sdkのなかのソースを眺めてはいるものの、原因部分の特定まで見切れて居ないのでもう少し見て行きたいと思う。

0 件のコメント:

コメントを投稿