gpt4 book ai didi

android - 如何正确关闭 Landscape VideoView Activity?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:03 32 4
gpt4 key购买 nike

在我的应用程序中,我有一个以横向模式播放 http 直播视频的 Activity 。

我的 AndroidManifest.xml:

<activity android:name=".MediaPlayerActivity"
android:label="@string/menu_player"
android:launchMode="singleInstance"
android:screenOrientation="landscape">
</activity>

我的 Activity 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/black">

<VideoView android:id="@+id/myVideoView"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_gravity="center_horizontal"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"/>

</LinearLayout>

问题是每次我关闭此 Activity (通过单击后退按钮)时,它总是在关闭之前旋转到纵向模式(时间很快但您可以在返回上一个 Activity 之前实际看到效果)。我该如何解决这个烦人的问题?

更新更多信息
这种烦人的行为只发生在如果之前的 Activity 是纵向模式,如果之前的 Activity 是横向的,那就没问题了。在我看来,当使用不同的 screenOrientation 设置淡入/淡出 Activity 时,这似乎与 Android 框架有关。

更新原因
在深入阅读了 Google 的 API 之后,我想我找到了导致这种恼人行为的原因,查看 here :

Unless you specify otherwise, a configuration change (such as a change in screen orientation, language, input devices, etc) will cause your current activity to be destroyed, going through the normal activity lifecycle process of onPause(), onStop(), and onDestroy() as appropriate. If the activity had been in the foreground or visible to the user, once onDestroy() is called in that instance then a new instance of the activity will be created, with whatever savedInstanceState the previous instance had generated from onSaveInstanceState(Bundle).

那么当点击后退按钮时在幕后发生了什么:currnet VideoView Activity(横向)被销毁,一个新的 VideoView Activity(纵向)被创建,因为 screenOrientation 配置已经改变,并且立即被销毁(你可以在这里看到效果在屏幕上),显示堆栈中的最后一个 Activity 。这也解释了为什么如果最后一个 Activity 具有相同的 screenOrientation 设置,这种烦人的行为就会消失。

由于配置更改,我仍在尝试找出如何绕过此 Activity 重新创建。正如 API 中所述,重写onConfigurationChanged(Configuration),但是,由于我在 xml 中显式定义了 screenOrientation,因此不会调用 onConfigurationChanged(),之前已经讨论过很多类似的 SO,比如 this one .

请提供正确方向的答案。

谢谢,

最佳答案

尝试在 Activity 的 onPause()< 中添加对 VideoView 的 suspend()resume()stopPlayback() 的调用onResume()onDestroy() 方法:

@Override
protected void onResume() {
mVideoView.resume();
super.onResume();
}

@Override
protected void onPause() {
mVideoView.suspend();
super.onPause();
}

@Override
protected void onDestroy() {
mVideoView.stopPlayback();
super.onDestroy();
}

VideoView 类的实现因设备而异(类本身是 very sparsely documented ),但 AOSP 的 Gallery3D 代码确实在其 MovieView activity lifecycle methods 中调用了上述方法。 ,所以希望大多数设备至少应该让自己在这种情况下看起来不错。

如果它看起来仍然很糟糕,您可能想在您的 Activity 中覆盖 onBackPressed() 以隐藏 VideoView 或一些类似的 hack 来隐藏烦人的行为:)

关于android - 如何正确关闭 Landscape VideoView Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909639/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com