画面間でインテントを開始するときに、最初にPendingAnimationをオーバーライドしようとしましたか?多分いくつかのフェードか何か。
また、新しいアクティビティを開始するときに、setContentViewでビューが膨らむまで少し時間がかかるため、これがどのように問題になるかがわかります。そのため、そのステップが完了するまで画面が真っ暗になる可能性があります。traceviewを使用して、時間がかかる場所を確認し、onCreate->onDestroyメソッドを少し最適化することができます。
アクティビティの作成はコストのかかるプロセスです。これが本当に煩わしいと感じた場合は、ビューフリッパーを使用して、可能なすべてのコードを個別のビューに移動し、xmlからそれらを膨らませます(多分、それらが重すぎる場合は、onCreateで両方をロードし、おそらく多くのポートレートビューとランドスケープに対して宣言された変数。アクティビティに依存コードを残し、各ビューの固有の機能をビュークラスに移動します。
これはただの策略です。私はこれをカバーフローと画像サムを含むgridViewで実行しましたが、すばらしい結果になりました。ビューの切り替えは非常に高速で、主にデータがビュー間で共有されていたため、メモリ消費量が非常に少なくなりました。
編集
したがって、ビューを再起動またはretainConfigurationStateにするこのようなことをしたいとします(Androidドキュメントでは、方向の変更が少し速く処理されると書かれています)。アクティビティグループで方向の変更を処理するためのコードは次のとおりです。
2つのアクティビティAとBがあり、どのタイプでもかまいません(TAbActivityなど...)
そして私はOrientationChangeActivityと呼ばれる1つの主要な活動を持っています:
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 = directionを追加する必要があります)。