1

我有两个活动AB. 我已在清单文件中将 for 声明screenOrientationA纵向和B横向。我从A到开始活动B。当我开始 ActivityA以及完成 ActivityB时,我的屏幕正在闪烁。我已将这configChanges两项活动设置为orientation.

这是清单代码片段:

<application
<activity android:name=".A"
            android:label="@string/app_name" android:theme="@style/MyTheme"
            android:screenOrientation="portrait" android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
            android:configChanges="orientation" />
<activity android:name=".B"
            android:label="@string/app_name" android:theme="@style/MyTheme"
            android:screenOrientation="landscape" android:windowSoftInputMode="stateAlwaysHidden|adjustUnspecified"
            android:configChanges="orientation" />

</application>

有没有办法解决这个问题???

提前致谢。

4

1 回答 1

1

首先,当您在屏幕之间启动意图时,您是否尝试覆盖 PendingAnimation?也许有些褪色或什么的。

我也看到这可能是一个问题,因为当您开始一项新活动时,在 setContentView 中的视图膨胀之前还有一小段时间,所以您可能会看到屏幕变黑,直到该步骤完成。也许使用 traceview 来查看它占用时间的地方,并可能稍微优化 onCreate->onDestroy 方法。

创建活动是一个昂贵的过程。也许如果这真的让你觉得很烦,请使用视图翻转器并将所有你可以使用的代码移动到单独的视图中,从 xml 中膨胀它们(也许如果它们不是太重,你可以在 onCreate 中加载它们并可能重用很多为纵向视图和横向声明的变量。您将把相关代码留在活动中,并将每个视图的独特功能移动到视图类中。

这只是一个难题。我已经用一个coverflow和一个包含图像拇指的gridView完成了这个,结果很好。切换视图非常快,并且内存消耗非常低,主要是因为视图之间共享数据。

编辑

因此,您想做这样的事情,让视图重新启动或 retainConfigurationState (在 android 文档中,它说这样可以更快地处理方向更改)。这是使用活动组处理方向更改的代码:

我有 2 个活动 A 和 B,可以是任何类型(TAbActivity 等...)

我有 1 个名为 OrientationChangeActivity 的主要活动:

    public class OrientationChangeActivity extends ActivityGroup {
        private ArrayList<String> mIdList;

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mIdList = new ArrayList<String>();
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            startChildActivity("ActivityA", new Intent(this, ActivityA.class));
        } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            startChildActivity("ActivityB", new Intent(this, ActivityB.class));
        }
        }
............

这是使用我评论中发布的链接。我将活动 A 设置为纵向纵向,将活动 B 设置为横向。我让 OrientationChangeActivity 自行重新启动(清单中不包含 configChage 声明),因此再次调用 onCreate 并切换活动。

你也可以看看代码:

@Override
public void finishFromChild(Activity child) {
LocalActivityManager manager = getLocalActivityManager();
int index = mIdList.size() - 1;

if (index < 1) {
    finish();
    return;
}

manager.destroyActivity(mIdList.get(index), true);
mIdList.remove(index);
index--;
String lastId = mIdList.get(index);
Intent lastIntent = manager.getActivity(lastId).getIntent();
Window newWindow = manager.startActivity(lastId, lastIntent);
setContentView(newWindow.getDecorView());
}

它告诉您如何在 activityGroup 中创建一个活动并将其设置为视图。您可以使用此代码在此处加载两个活动,并根据方向更改将它们设置为内容视图。(意味着您需要添加 configChage=orientation)。

于 2011-07-14T15:09:40.080 回答