Obecnie pracuję nad tapetą na żywo, która jest bardzo intensywna i nie radzi sobie z obrotem ekranu.Rotacja ekranu na żywo tapety
W rzeczywistości tapeta jest zniszczona i wyświetla pusty ekran bez wywoływania funkcji SURfaceChanged!
Oto co mam w metodzie onSurfaceChanged:
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// TODO Auto-generated method stub
super.onSurfaceChanged(holder, format, width, height);
mRatio = (float) width/height;
if (mRatio > 1) {
orientation = 0;
}
if (mRatio < 1) {
orientation = 1;
}
setRunning(true);
Log.i(TAG, "Screen Rotation...");
mHandle.post(r);
}
Jestem przekonany, ta metoda nie sprawdzony, ponieważ nie ma wiadomości dziennika.
Dlaczego tak się dzieje i jakie są techniki obchodzenia obracania ekranu? Czy to możliwe, że moja tapeta na żywo jest tak intensywna, że nie można nazwać pustki?
Również onVisibilityChanged nie nazywa się dobrze i podczas otwierania aplikacji na emulatorze, nie ma wiadomości dziennika:
@Override
public void onVisibilityChanged(boolean visible) {
// TODO Auto-generated method stub
super.onVisibilityChanged(visible);
if (visible) {
setRunning(true);
Log.i(TAG, "Visible...");
mHandle.postDelayed(r, 2000);
} else {
setRunning(false);
Log.i(TAG, "Invisible...");
mHandle.removeCallbacks(r);
}
}
Czy możesz dodać więcej kodu? Musisz wiedzieć, gdzie jest wykonywana cała ciężka praca. W mojej Live Wallpaper zarówno onSurfaceChanged, jak i onVisibilityChanged zostają wywołani podczas obracania ekranu. Sprawdź także LogCat pod kątem czegoś takiego jak "Czas oczekiwania na przesunięcie tapety" podczas zmiany orientacji. – Ole