2016-12-06 11 views
1

Я не понимаю, почему это происходит: мне нужно создать каждую активность в одном экземпляре, поэтому я помещаюв манифест. Но когда я нажимаю «Домой» на устройстве и снова открываю его, система очищает стек и открывает корневую активность, а не последнюю, которая была открыта. Как сохранить последнюю открытую активность для пользователя, но сохранить singleInstance в манифесте?Стол работ (после выхода из приложения система очищает стек, если launchMode = "singleInstance")

EDIT: Manifest

... 


    <application 
     ...>   

     <activity 
      android:name=".ui.login.LoginActivity" 
      android:launchMode="singleInstance" 
      android:screenOrientation="portrait"/> 
     <activity 
      android:name=".ui.activity.MainActivity" 
      android:label="${app_title_constant}" 
      android:launchMode="singleInstance" 
      android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
      <intent-filter> 
       <data android:scheme="${scheme}"/> 

       <action android:name="android.intent.action.VIEW"/> 

       <category android:name="android.intent.category.DEFAULT"/> 
       <category android:name="android.intent.category.BROWSABLE"/> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ui.more.service.ScannerActivity" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme"/> 
     <activity 
      android:name=".ui.activity.CardsListForSendActivity" 
      android:launchMode="singleInstance" 
      android:screenOrientation="portrait"/> 

     <activity 
      android:name=".ui.activity.CountriesActivity" 
      android:launchMode="singleInstance" 
      android:screenOrientation="portrait"/> 
     <activity 
      android:name=".ui.activity.StepperCardPurchaseActivity" 
      android:launchMode="singleInstance" 
      android:screenOrientation="portrait"/> 

     <service 
      android:name=".service.CacheContactsIntentService" 
      android:exported="false"/> 
     <service 
      android:name=".managers.push.PushNotificationExtenderService" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.onesignal.NotificationExtender"/> 
      </intent-filter> 
     </service> 

     <receiver 
      android:name=".managers.push.PushBroadcastReceiver" 
      android:enabled="true"> 
     </receiver> 
    </application> 

</manifest> 
+0

Есть ли причина, по которой вам нужно создать каждую активность в одном экземпляре? Если нет, не делайте того, чего не ожидает ваш пользователь. –

+0

@BartFriederichs соответствует требованиям клиента. Кроме того, я использую OneSignal для push-уведомлений, и когда вы нажимаете push, он открывает MainActivity, затем пользователь отбирает Back и снова видит MainActivity, поэтому это вторая причина, по которой мне нужно singleInstance – alla

+0

опубликовать ваш манифест –

ответ

0

Не используйте launchMode="singleInstance". Это не обязательно, и на самом деле для вас все равно не работает. Обычно указание «singleInstance» приведет к запуску каждого Activity в свою отдельную задачу. Это, однако, не произойдет в вашем случае, потому что вы не указали «taskAffinity» в манифесте. Поскольку все действия по умолчанию имеют одинаковую близость к задаче, все они окажутся в одной и той же задаче (даже если вы указали режим запуска singleInstance).

Удалить все спецификаторы launchMode и попробуйте еще раз.

Стандартное поведение Android заключается в том, чтобы вернуть пользователя в стек задачи (точно так же, как он его оставил), когда приложение было перенесено из области на задний план (после нажатия кнопки HOME и возврата в приложение).