0

アクティビティ履歴の消去という 1 つの問題に直面しました。私の問題が発生した場合、次の結果が生じます。

A(SplashScreen)->B(GuestScreen)->C(Screen for signed users)->Press Home Button->A->B->Press Back Button->C->Press Back BUtton->B->Press Back Button->exit from the app.

私はそれを解決するためにさまざまな方法を試しましたが、ほぼすべてのアクティビティをsingleInstanceに設定する全体で非常に奇妙な解決策が1つしか見つかりませsetting all intent flags to CLEAR_TOP and NEW_TASKんでしたが、すべてのアクティビティが奇妙なものを提示しています(通常とは異なり、最初に、actionBarと〜1の後に空の黒い画面が表示されます2 番目は私の実際のレイアウトに表示されます) と、既に述べたように少し遅れて表示されます。すべてが正しく閉じられ、正しい結果が得られるにもかかわらず、このソリューションは好きではありませんでした。今、私は、この遅延や奇妙な黒い画面が一瞬発生することなく、正常に動作するようにしようとしています. 私もインテントフラグで遊んでみましたCLEAR_TASK, CLEAR_TOP。必要な場所で他の人に使用しようとしclearTaskOnLaunh for root activity and finishOnLaunch in manifest fileましたが、役に立ちません。修正方法は?

編集:

clearTaskOnLaunch を A に再度設定しようとしています。アプリを初めて起動すると、次のログが表示されます (A は既にフラグなしで B を呼び出しています)。

  Main stack:
    TaskRecord{42610648 #869 A }
    Intent { flg=0x10000000 cmp=/.activities.SplashActivity }
      Hist #4: ActivityRecord{413cf8f8 /.activities.GuestActivity}
        Intent { cmp=/.activities.GuestActivity }
        ProcessRecord{414fdf60 15651:/10103}

// Guest Activity(B) は UserActivity(C) を呼び出します:

    Intent { flg=0x10000000 cmp=/.activities.SplashActivity }
  Hist #3: ActivityRecord{415c86f0 /.activities.UserActivity}
    Intent { cmp=/.activities.UserActivity }
    ProcessRecord{414fdf60 15651:/10103}

//ホームボタンを押して、アプリを再度起動します(A が B を呼び出しました):

    TaskRecord{42610648 #869 A cashongo.app.peachy}
Intent { flg=0x10000000 cmp=c/.activities.SplashActivity }
  Hist #5: ActivityRecord{42127398/.activities.GuestActivity}
    Intent { cmp=/.activities.GuestActivity }
    ProcessRecord{414fdf60 15651:/10103}
  Hist #4: ActivityRecord{415c86f0 /.activities.UserActivity}
    Intent { cmp=/.activities.UserActivity }
    ProcessRecord{414fdf60 15651:/10103}

再び同じ問題、歴史の最後の活動。戻るボタンを押すと、UserActivity が取得されます。

4

3 に答える 3

0

私たちがそれを修正した方法は、最初のアクティビティで静的ブール変数を取得することです。最初のアクティビティが A であるとします。A では、以下のように変数を宣言します。

public static boolean closeAllActivities=false;

次に、残りのすべてのアクティビティで、以下のコードを onResume() に配置します

protected void onResume() {
super.onResume();
if(A.closeAllActivities)
{       
    finish();   
}
else
{
    // TODO your requirement inside onResume
}
      }

そして、アプリケーションセットを終了したい場所ならどこでも

A.closeAllActivities=true;//It exits all the activities one after other.
于 2013-05-10T09:18:35.897 に答える
0

なんとか修正できたようですが、まだ少し奇妙です。A アクティビティと B アクティビティに launchMode=singleInstance を設定しました。そして、フラグなしでアクティビティを呼び出します。アクティビティの呼び出し間に 1 秒の遅延がある黒い画面はありません。Google は一般的な状況で singleInstance または singleTask を使用することを推奨していないため、少し奇妙な解決策です。一般的だと思います。誰かがより良い解決策を見つけたら、大歓迎です。

更新: IDE 経由で apk をビルドして起動するときのもう 1 つの非常に重要なこと。ある種の IDE 起動アプリは、この投稿を誤って参照しています。これにより、スタックの動作が変更される可能性があります。

于 2013-05-10T13:07:41.077 に答える