現在、AndroidでLiveWallpaperを使用してテストを行っています。SurfaceHolder.lockCanvasは、サーフェスがフォアグラウンドにない場合はnullを返します。
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = new Canvas();
c = holder.lockCanvas(); // c becomes null
c.save();
c.drawBitmap(currentBitmap);
c.restore();
holder.unlockCanvasAndPost(c);
この部分は、通常の状況下正常に動作している:私はこのようになりますコードを使用してキャンバス上に何かを描いています。ただし、このサービスに対応する[設定]で設定が変更されたときに、このコードを実行するリスナーがあります。設定作業からこのコードを実行するたびにメソッドでNullPointer
が表示されているようです。
壁紙がフォアグラウンドにない場合にのみ、holder.lockCanvas()が表示されているようです。それが前景にないときにこのサーフェスに描画することは不可能ですか?
ええとリスナーを削除することはできますが、問題はキャンバスが表示されていないときに再描画して、キャンバスが表示されたときにユーザー設定に基づいて既に更新されるようにすることですユーザーが変更を見ているのは、今起こっていることです。 –
onVisibilityChangeの前に呼び出されるものはありますか? –
これを回避するためにonVisibilityChangedが 'true'を渡すときにonSharedPreferencesChanged(null)を呼び出すことができます。 – Josh