Androidで画面の向きが変わると画面が点滅しますか?

android android-orientation orientation
Androidで画面の向きが変わると画面が点滅しますか?

2つのアクティビティ「A」と「B」があります。 マニフェストファイルで、「A」の「screenOrientation」をポートレートとして、「B」の横をランドスケープとして宣言しました。 「A」から「B」までアクティビティを開始しています。 アクティビティ「A」を開始し、アクティビティ「B」を終了すると、画面が点滅します。 両方のアクティビティの configChanges`を orientation`として設定しました。

これはマニフェストコードスニペットです。

この問題を解決するアイデアはありますか?

前もって感謝します。

  1  1


ベストアンサー

画面間でインテントを開始するときに、最初にPendingAnimationをオーバーライドしようとしましたか? 多分いくつかのフェードまたは何か。

また、新しいアクティビティを開始するときに、setContentViewでビューが膨らむまでに少し時間がかかるため、これがどのように問題になるかを確認します。 traceviewを使用して時間のかかる場所を確認し、onCreate→ onDestroyメソッドを少し最適化することができます。

アクティビティの作成は費用のかかるプロセスです。 多分これがあなたに迷惑を感じたら、ビューフリッパーを使用して、XMLからそれらを膨らませる別のビューにできるすべてのコードを移動してください(多すぎる場合は、onCreateでロードして、おそらく縦向きビューと横向きに対して宣言された変数。 アクティビティに依存コードを残し、各ビューの一意の機能をビュークラスに移動します。

これは単なる考えです。 私はカバーフローと画像の親指を含むgridViewでこれを行いましたが、それは素晴らしいことがわかりました。 ビューの切り替えは非常に高速で、主にビュー間でデータが共有されたため、メモリ消費が非常に少なくなりました。

編集

したがって、ビューを再起動またはretainConfigurationStateにするようにこのようなことをしたいです(アンドロイドのドキュメントでは、方向の変更が少し速く処理されると述べています)。 アクティビティグループで方向の変更を処理するコードは次のとおりです。

任意のタイプ(TAbActivityなど)の2つのアクティビティAとBがあります。 )

そして、私はOrientationChangeActivityと呼ばれる1つの主要なアクティビティを持っています:

    public class OrientationChangeActivity extends ActivityGroup {
        private ArrayList mIdList;

        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mIdList = new ArrayList();
        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を追加する必要があります)。

1


タイトルとURLをコピーしました