1

我的应用程序中的屏幕方向有问题。我在 res/layout-lan 文件夹中为横向模式创建了一个备用布局。方向改变时出现问题,

1.在不破坏旧活动的情况下重新创建活动。

2.因为我在我的应用程序中使用媒体播放器,所以在屏幕旋转时,.mp3 同时在两个方向上播放..

我无法找到适当的示例代码来处理屏幕方向并保存和恢复活动的状态............

4

4 回答 4

3

1.在不破坏旧活动的情况下重新创建活动。

当配置更改发生时,重新创建Activity是 Android 的自然默认行为。您的旧 Activity 在内存中徘徊的可能原因是它正在引用当前正在播放的MediaPlayer.

因为横向和纵向使用不同的布局资源,所以让 Android 重新创建 Activity 并每次拉取适当的资源对您有利。如果您自己处理旋转,您也将负责重新加载正确的布局。

2.因为我在我的应用程序中使用媒体播放器,所以在屏幕旋转时,.mp3 同时在两个方向上播放..

这个问题有两种解决方案...

理想的解决方案是将您的媒体播放移动到Service. Activity可以调用Service启动/停止/等。在用户指示时播放,但将其放入像 a 这样的背景组件Service中,即使您Activity由于更改而处于不断变化的状态,它也可以连续运行。这是 Android 团队鼓励的设计模式,您Activity实际上只处理用户界面。

另一种可行的解决方案MediaPlayerActivity使用onRetainNonConfigurationInstance(). 这允许单个实例MediaPlayer之间存在Activity,保持播放一致。例如:

public class MyActivity extends Activity {
    private MediaPlayer mPlayer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Check if we have a player passed in from the last instance
        mPlayer = (MediaPlayer)getLastNonConfigurationInstance();
        //If not, make a new one
        if (mPlayer == null) {
            mPlayer = new MediaPlayer();
           //...Set up new player instance...
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        //Clear our member variable to guarantee this Activity
        // is allowed to GC after onDestroy()
        MediaPlayer instance = mPlayer;
        mPlayer = null;
        //Hand our current player up to the next Activity to be created
        return instance;
    }

}

确保最佳内存清理的另一个选项是定义mPlayer为 aWeakReference<MediaPlayer>以允许 GC 声明 old Activity,即使MediaPlayer在配置更改时正在播放音频。

于 2012-07-11T18:46:49.647 回答
0
                       v 

创建文件夹res/layout-land

而不是 res/layout- lan <---- 将d放在文件夹名称中

于 2012-07-11T18:35:52.820 回答
0

当屏幕方向通过以下步骤更改时,您可以停止重新创建活动。

如下设置 configChanges 标签

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

使用下面的方法。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
   // to do on orientation changed          
    }
    }
于 2012-07-11T18:22:12.613 回答
0
//by changing the orientation if your layout not disturb in design just data 

//销毁 //然后在你想要做的活动清单中使用下面的属性

  android:configChanges="orientation|screenSize|layoutDirection"

//but your whole screen design disturb then turn off orientation by using this

 android:screenOrientation="portrait"
于 2021-03-26T07:41:46.110 回答