2

私のアプリケーションには複数のアクティビティがあり、メインアクティビティ(A)はlaunchMode singleTopにあり、すべてのアクティビティはsingleInstanceモードです。最近のアプリケーション画面からsingleInstanceアクティビティを開いたときにタスクスタックを保持

私はこのようにナビゲートする場合illimitedナビゲーション を防止するためsingleInstanceを選択しました:A - > B - > C - > B - > C - > B - > C バックアクションが行います:C - > B - > A

期待どおりに動作します。

問題:私がA - > Bをナビゲートすると、私はアプリケーションrecents画面を開いて、自分のアプリケーションをクリックすると、アクティビティbが表示されますが(ok)、アプリケーションが終了してアンドロイドホームに戻ります最近のアプリケーション画面からBを開くことができます)

最近のアプリケーションメニューからアプリケーションを開くと、タスク履歴が保持されないのはなぜですか?あなたの助けのための

<activity 
     android:name="A" 
     android:label="@string/app_name" 
     android:launchMode="singleTop" 
     android:configChanges="orientation|screenSize" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".SearchResultsActivity" /> 
    </activity> 
    <activity 
     android:configChanges="orientation|screenSize" 
     android:name="B" 
     android:label="B" 
     android:launchMode="singleInstance" 
     android:theme="@style/AppTheme.NoActionBar"> 
    </activity> 
    <activity 
     android:configChanges="orientation|screenSize" 
     android:name="C" 
     android:label="C" 
     android:launchMode="singleInstance" 
     android:theme="@style/AppTheme.NoActionBar"> 
    </activity> 

おかげ

+0

これは「期待どおりに動作する」可能性がありません。 'taskAffinity'も設定しないと、' launchMode = "singleInstance" 'を設定することは無意味です。あなたはA→B→C→B→Cへの移行方法を投稿してください。それぞれの遷移に対して 'startActivity()'を呼び出すだけなら、あなたの仕事にはBとCの複数のインスタンスが確実に存在します。 –

答えて

1

singleInstance活動が呼び出された場合は、新しいタスクが作成されます。 dumpsysには2つのタスクがありますが、タスクマネージャには1つのタスクしか表示されません。これはシステムバグかもしれません。また、アクティビティBをtaskAffinityに設定すると、タスクマネージャに2つのタスクが存在する可能性があります。

あなたはAからsingleInstance Bを起動するので、二つのタスクが存在することになるが存在していた:タスク2あなたはAのみが含まれ、タスクマネージャからタスク2を開き、活動B.

が含まれていながら、 タスク1は、活動Aが含まれていますsingleIntance活動B、戻るボタンを使用している場合に関係なく活動が活動として新しいタスクまたは同じタスクで起動するかどうかの

ので、それはうまく機能

バックアクティビティAにあなたがすることはできませんので、それを始めたのは、バクkボタンは常にユーザーを前のアクティビティに移動させます。

これはDeveloper Document: Tasks and Back Stackから取得できます。

本当に本当に必要な場合は、singleInstaceモードを使用しないことをお勧めします。

+0

起動モード 'singleInstance'と' singleTask'は 'taskAffinity'も指定されていなければ、文書化された/期待どおりに動作しません。 –

+0

@DavidWasserはい、これはシステムバグかもしれません。 –

関連する問題