현재 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);
이 부분은 정상적인 상황에서 잘 작동 : 내가 이렇게 보이는 코드를 사용하여 캔버스에 뭔가를 그리기입니다. 그러나이 서비스에 해당하는 설정에서 설정이 변경 될 때마다이 코드를 실행하는 수신기가 있습니다. 설정 작업에서이 코드를 실행할 때마다 c.save()
메서드에서 NullPointer
이 표시되는 것으로 보입니다.
배경 화면이 포 그라운드에없는 경우에만 holder.lockCanvas()가 나타납니다. 포 그라운드에 있지 않을 때이 표면으로 그릴 수 없습니까?
그래, 내가 청취자를 제거 할 수 있다면 좋을 것이다. 문제는 캔버스가 보이지 않을 때 다시 그려서 캔버스가 보이게 될 때 이미 사용자 설정에 따라 업데이트되도록하는 것이다. 사용자가 변경된 것을 볼 수 있습니다. 이는 현재 일어나고있는 일입니다. –
onVisibilityChange 전에 호출되는 항목이 있습니까? –
onVisibilityChanged가 'true'를 전달하면 onSharedPreferencesChanged (null)을 호출하여이 문제를 해결할 수 있습니다. – Josh