0

アクティビティ A と B の 2 つのアクティビティがあり、アクティビティ A には a1、a2、a3 という 3 つのフラグメントがあります。a3 は動画を表示するデフォルトで選択されたフラグメントで、a2 には 1 つの大きな textView と小さな edittext が含まれ、a1 にはリストビューが含まれます。

アクティビティ A のタイトル バーにボタンがあり、タイトル バーにあるため、3 つのフラグメントすべてから表示されます。このボタンの OnClick は、次の関数を使用してアクティビティ B. を開きます。

public void inviteUser() {
    if ( getUserType() == ACTIVE ) {
        Intent intent = new Intent(this, B.class);
        intent.putExtra(Constants.MEETING_ID, (long) session.getSessionId());
        intent.putExtra(Constants.INVITE_FROM_SESSION, true);
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        this.startActivityForResult(intent, RESULT_OK);
    } else {
        Toast.makeText(this, getString(R.string.strNotAPresenterMsg), Toast.LENGTH_LONG).show();
    }
}

BI 内でそのsetResult(ResultCode) and finish(). フラグメント a1 と a2 から Bを開始すると、 2 つの問題が発生します。

1. B が A に戻るまでに時間がかかりすぎる (つまり、戻るボタンを押した後、または B の作業を終了した後) 2. 戻った後、別のフラグメントに移動するか、デバイスは、それを実行すると、驚くほど正常に動作し始めます。

フラグメント a3 からアクティビティ B を開始すると、すぐに戻り、正常に動作します。

これらのフラグメントのすべてのライフサイクル メソッドをオーバーライドして、各メソッド内に L​​og ステートメントを配置しようとしました。痛みは、メソッド呼び出しシーケンスが正常であり、両方のケースで同じであることです。

インテントのフラグを変更しようとしましたが、効果がありません。

android:configChanges="keyboardHidden|orientation"アプリのすべてのアクティビティにfalg を追加しました。

コードの特定の部分が必要な場合に備えて、問題を説明していただければ幸いです。コメントしてください。質問を編集して追加します。みんな助けて!!!

EDIT GingerBread 2.3.6でテストしていましたが、動作していませんでしたが、JellyBeanを実行しているエミュレータで確認したところ、正常に動作しています。問題はOSのバージョンに関連しているようです。何か案が ?

EDIT 2 観察の重要なポイントの1つは、BIで戻るボタンを押すと、数ミリ秒後に前のアクティビティのonResume()とそのフラグメントが呼び出されることです。しかし、その後もBはしばらくの間画面に表示され、電話が数秒間ハングしたようです....

EDIT 3 フラグメントa1またはa2からBを開始すると、BのonStop()およびOnDestroy()が呼び出されないことを知りました。ただし、私がa3を使用している場合、それらは完全に呼び出されます。この理由は何ですか?

ドキュメントによると、「アクティビティの目に見える有効期間は、onStart() の呼び出しから対応する onStop() の呼び出しまでの間に発生します。この間、ユーザーはアクティビティを画面上で見ることができますが、フォアグラウンドではなく、ユーザーと対話します。」

onStop() は呼び出されていないときにアクティビティが異常な動作をすることが保証されていないため.. また、HoneyComb+ デバイスでは常に呼び出されることも知りました。onPause() 内で onStop() を呼び出してみましたが、うまくいきません。私は今何をしますか?

4

1 に答える 1

1

It was really hard for me to explain my problem to SO community and even harder was to understand the problem source but once I tracked the error source it just took few mins to solve the problem.

The problem was due to an included layout (say x) in the Activity's layout view. The x's visibility was being decided on the current fragment. It was visible on a3 and View.GONE on other two fragments. I removed that layout from a1 and a2 and the problem was solved...

However I still can't understand what it has to relate with the B's onStop and onDestroy which are now being called perfectly... If anyone can find than please share..

Hope the information can be helpful for someone else,

于 2012-12-27T05:19:54.320 に答える