处理屏幕方向 - Android

2023-12-09

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

1.重新创建一个活动而不破坏旧的活动。

2.由于我在应用程序中使用媒体播放器,因此在屏幕旋转时 .mp3 同时在两个方向上播放。

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


1.重新创建一个活动而不破坏旧的活动。

的休闲娱乐Activity是发生配置更改时 Android 的自然默认行为。您的旧 Activity 在内存中徘徊的可能原因是它引用了当前正在播放的 Activity 实例MediaPlayer.

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

2.由于我在应用程序中使用媒体播放器,因此在屏幕旋转时 .mp3 同时在两个方向上播放。

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

理想的解决方案是将您的媒体播放转移到Service. The Activity可以调用Service启动/停止/等等。当用户指示时播放,但将其放入后台组件中,例如Service即使您的Activity由于变化而不断变化。这是 Android 团队鼓励的设计模式,您的Activity实际上只处理用户界面。

另一个可行的解决方案是通过您的MediaPlayer从旧的Activity到新的使用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 as a WeakReference<MediaPlayer>允许 GC 认领旧的Activity,即使MediaPlayer在配置更改时正在播放音频。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理屏幕方向 - Android 的相关文章

  • 使用arm-linux-gnueabi-gcc为Android交叉编译静态C hello world

    我想使用 arm linux gnueabi gcc 从 C 构建静态 hello world 而不是使用 NDK 独立工具链或 Codesourcery 在Ubuntu中 我做了以下事情 sudo apt get install gcc
  • 进入沉浸式全屏模式时状态栏为白色

    我根据以下内容做了一个关于沉浸式全屏模式的简单项目使用沉浸式全屏模式 https developer android com training system ui immersive html But first of all it per
  • Eclipse 运行时 Dalvik 错误

    当我要运行任何程序时 会显示此对话框 在 Eclipse 中 这些错误显示在控制台中 2013 02 25 19 05 09 Dex Loader Unable to execute dex Target out of range 0000
  • Android 中的计时器任务在无限期时间后停止运行

    我是安卓新手 我正在开发一个应用程序 其中一段特定的代码在后台每 5 秒后执行一次 为了实现这一目标 我使用带有定时器的服务 其中包含定时器任务 有时它工作正常 但经过一段时间后 我的服务正在运行 但计时器任务在 android 中自动停止
  • 有人知道如何在android中实现像Unfold(这是iphone中的应用程序)这样的效果吗?

    我怎样才能实现这个效果呢 任何建议都会对我有帮助 None
  • 如何刷新 Android 上的 MediaStore?

    这最初是 Android 论坛上的一个一般用户问题 然而 它必然成为一个编程问题 这是我的问题 Android 有一个服务 MediaScanner 每当 我相信 SD 卡卸载和重新安装时它都会在后台运行 该服务收集卡上所有媒体文件的数据
  • Windows 7 64位android AVD启动错误:无法分配内存:8

    我刚刚更新到 Android SDK Tools r20 并尝试在 android 4 1 和 WXGA 上创建 avd 但是当我启动 AVD 时收到错误消息 配置 ini hw mainKeys no hw lcd density 320
  • 从图库加载图像时应用程序崩溃

    在我的应用程序中 我有两个按钮 一个用于从图库 从设备 加载图像 另一个用于通过访问设备的相机拍照 我的代码在某些设备上正常工作 bt在某些设备上 应用程序单击图库中的图像时崩溃 任何人都可以帮助我找出实际问题吗 public class
  • GPSTracker 类不工作

    我尝试在我的应用程序中使用我在网上找到的 GPSTracker 类 并且我之前让它工作过 但现在似乎莫名其妙地不起作用 public class GPSTracker extends Service implements LocationL
  • getExternalCacheDir() 在 Android 上如何工作?

    据我了解 我们将经常访问的对象缓存在比普通磁盘读取更容易访问的内存段中 getExternalCacheDir 相对于getCacheDir 指向外部文件系统 在我看来这是正常的getExternalFilesDir Android 如何优
  • 在 Volley 中更新 UI 最有效的方法是什么

    最近我在 android 中使用 Volley 库 它工作得很好 但我想知道更新 UI 的最有效方法 我有一个包含所有 Volley 方法的 Utils 类 现在我传递了所有视图将作为参数更新 但我读到我可以在活动中实现侦听器 然后将它们作
  • 使用 KitKat 存储访问框架后打开 Google Drive 文件内容 URI

    我正在使用 android 4 4 的存储访问框架并打开文件选择器 一切正常 除了从 Google Drive 选择文件时 我只能弄清楚如何将其作为输入流打开 但我想获得一个 java File 对象 返回的内容 uri 如下所示 cont
  • 为什么 CheckBox 检查不能以编程方式与 Kotlin 一起使用?

    我想这个问题以前可能有人问过 但这个问题也发生在我身上 所以我在这里再次询问 看看我们能否找到解决方案 所以基本上问题是以编程方式检查复选框不与 Kotlin 代码一起工作 为了解释一下 我正在分享我的代码和问题的屏幕截图 filterCo
  • 滑动抽屉上的按钮? - 安卓

    好吧 我已经在我正在构建的 Android 应用程序中的滑动抽屉上实现了一个按钮 唯一的问题是 当我按下按钮时 整个滑动抽屉都会被按下并向上滑动 我知道我可以在 XML 中禁用 按向上滑动 但这似乎不起作用 因为滑动抽屉仍然在没有向上滑动的
  • 具有 jsonObject 的 android 列表视图

    我正在开展一项活动 该活动请求服务器上的一个 php 文件 此 php 文件将返回给我一个JSONArray having JSONObjects作为它的元素 我明白了jArray并提取其内容 例如所有jsonObjects 每个 json
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • 从字符串中删除特定字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从字符串中删除特定字符 我有一个 Arraylist 测试数组 String line testingarray get index
  • 如何使用 Android 手机通话时播放声音?

    是否可以通过编程方式与电话进行交互 例如 您可以通过程序向呼叫者播放音频吗 Google 尚未公开任何允许我们向特定正在进行的调用提供数据的 API 不过 您可以控制通话 检查这篇文章 here http prasanta paul blo
  • Android:警报对话框消失并执行下一个意图

    我正在使用禁用 GPS 的 AlertDialog 一旦用户启用 GPS 我就会通过 Intent 转到另一个 Activity 问题是 AlertDialog 出现 然后移动到下一个活动 然后我才能单击对话框上的任何按钮 我需要做什么才能
  • 2 位小数格式的货币输入

    我需要将输入货币格式化为 2 位小数格式 例如 当用户输入 2 时 它看起来为 2 00 美元 然后当用户输入 2 时 它会转换为 22 00 美元 等等 我采用类似的方法 当用户输入 2 时 它会转换为 0 02 下一个 2 将是这样的

随机推荐