我有两项活动A
和B
。我已将screenOrientation
的{{1}}声明为纵向,并将A
声明为清单文件中的横向。我正在从B
到A
开始活动。当我开始活动B
以及完成活动A
时,我的屏幕会闪烁。我已将B
作为configChanges
设置为orientation
。
这是Manifest代码段:
<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>
有什么想法解决这个问题吗???
先谢谢。
答案 0 :(得分:1)
首先,当你在屏幕之间启动意图时,你是否试图覆盖PendingAnimation?也许有些褪色或其他什么。
我也看到这可能是一个问题,因为当你开始一个新的活动有一点时间,直到视图在setContentView中膨胀,所以你可能会看到屏幕变黑,直到该步骤完成。也许使用traceview来查看占用时间的位置,并且可能会稍微优化onCreate-&gt; onDestroy方法。
创建活动是一个昂贵的过程。也许如果这对你来说真的很烦人,可以使用视图鳍状肢并将所有代码移动到单独的视图中,将它们从xml中膨胀(也许如果它们太重,你可以在onCreate中加载它们并且可能重用很多为纵向视图和横向声明的变量。您将在活动中保留相关代码,并将每个视图的唯一功能移动到视图类中。
这只是一个挑战。我用Coverflow和包含图像拇指的gridView做了这个,结果很棒。切换视图真的很快,它的内存消耗非常低,主要是因为数据是在视图之间共享的。
修改强>
所以你想做这样的事情让视图重新启动或者保持配置状态(在android文档中它表示方向更改的处理方式更快一些)。 以下是使用活动组处理方向更改的代码:
我有2个活动A和B,可以是任何类型(TAbActivity等......)
我有一个名为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)。