3

Androidでライブ壁紙を作成しようとしています。次の方法でテキストが描画され、カスタム文字列が assets ディレクトリに配置されます。

String path = "fonts/calligraffiti.ttf";
AssetManager a1 = getApplicationContext().getAssets();
Typeface typef = Typeface.createFromAsset(a1, path);
mp1.setTypeface(typef);

ここでは mp1 はペイントです。これを描画する方法は次のとおりで、これは毎秒更新されます。

c.drawText(Integer.toString(t.get(Calendar.HOUR)), wt/2-5*wt/100, ht/2+sec*60+ht/15, mp1);

数秒ごとに Logcat に次のように表示されます: フォント キャッシュから 41K をパージ [6 エントリ] など

01-02 13:31:59.344: I/ActivityManager(1319): Process ca.jvsh.livewallpaper (pid 3444) has died.
01-02 13:31:59.375: W/WallpaperService(1319): Wallpaper service gone: ComponentInfo{ca.jvsh.livewallpaper/ca.jvsh.livewallpaper.LiveWallpaper}
01-02 13:31:59.383: I/WindowManager(1319): WIN DEATH: Window{457c0628 ca.jvsh.livewallpaper.LiveWallpaper paused=false}
01-02 13:31:59.391: W/ActivityManager(1319): Scheduling restart of crashed service ca.jvsh.livewallpaper/.LiveWallpaper in 5000ms
01-02 13:31:59.508: I/ActivityManager(1319): Low Memory: No more background processes.

これは、カスタム フォントの使用が原因であることは間違いありません。私が使用するカスタム フォントでも同じことが起こり、カスタム フォントがなくてもすべて正常に動作します。

ライブ壁紙サービスをクラッシュさせずにカスタム フォントを引き続き使用するにはどうすればよいでしょうか?

回答ありがとうございました!

4

1 に答える 1

0

ライブ壁紙アプリでも同様の問題がありました。私は自分の opengl テクスチャに問題を追加するかどうか疑問に思っていましたが、最後に、Android OS が必要とする場合はいつでもアプリをメモリから消去できると述べ、AlarmManager を使用して回復プロセスを追加しました。

いくつかの参照:

https://stackoverflow.com/a/14748123/3540391

https://stackoverflow.com/a/8321512/3540391

于 2014-06-17T08:03:55.907 に答える