Вращение экрана в реальном времени

В настоящее время я работаю над живыми обоями, которые очень интенсивны и не очень хорошо справляются с вращением экрана.

Фактически обои уничтожаются и отображает пустой экран без вызова onSurfaceChanged!

Вот что я имею в методе 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); } 

Я уверен, что этот метод не вызван, потому что сообщения журнала нет.

Почему это происходит и какие методы обработки вращения экрана? Может быть, мои живые обои настолько интенсивны, что пустоту нельзя назвать?

Кроме того, onVisibilityChanged также не вызывается, и когда я открываю приложения на эмуляторе, нет сообщения журнала:

 @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); } } 

В своем манифесте заявите:

  <activity android:name=".YourActivityName" android:configChanges="keyboardHidden|orientation" </activity> 

Ваш метод onSurfaceChanged должен быть вызван только в том случае, если объявить configChanges в манифесте!

Что касается второй проблемы: onVisibilityChanged – это не то, что вы ожидаете от имени:

Called when the window containing has change its visibility (between GONE, INVISIBLE, and VISIBLE). Note that this tells you whether or not your window is being made visible to the window manager; this does not tell you whether or not your window is obscured by other windows on the screen, even if it is itself visible.

Вам нужно проверить, является ли ваше приложение «видимым» для пользователя через onPause() и onResume()