1

короткая версия:Android App открывает второй случай, когда «запущен» после того, как кнопка нажата снова

Приложение I развиваются открывает второй случай, когда он «начал» после того, как кнопка назад была нажата.

Long Version:

Когда приложение запускается из «домашний экран» он работает мелко-, если заявка отправляется на задний план, нажав кнопку со стрелкой назад, нажав на кнопку круг, или квадратную кнопку, чтобы перейти к другому приложению, - и затем приложение возобновляется через многозадачное меню, он отлично работает - возобновляется точно, где он остановился, - снова не отображает экран всплеска и, самое главное, не открывает второй экземпляр. Однако, если приложение отправлено на задний план, а затем снова запущен с главного экрана создается второй экземпляр приложения! Экран заставки снова отображается, и основное действие отображается на экране, а не последнее действие, которое было на экране пользователя! Это, очевидно, не желаемое поведение, и многие решения, которые я попытался, не работают.

Manifest:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 
    android:launchMode="singleInstance"> 
    <activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:launchMode="singleInstance"> 
    </activity> 
    <activity 
     android:name=".Settings_area" 
     android:screenOrientation="portrait" /> 
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="AIzaSyDieXTCaFoIL0kJ_IM4UMBSQL3sNn92AWM" /> 

    <activity 
     android:name=".MapsActivity" 
     android:label="@string/title_activity_maps" /> 
    <activity android:name=".Splash" 
     android:launchMode="singleInstance"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 
    <activity android:name=".aboutPageActivity" /> 
    <activity android:name=".turnOffFromNotification" 
     android:noHistory="true"></activity> 
</application> 

Edit: Я также попытался заменить launchMode в теге приложений с singleTask и singleInstance.

+0

Я вижу, что ваша активность запуска - 'singleInstance'. Возможно, это приводит к такому поведению. – Shaishav

+0

Привет @Shaishav Я изменил это на singleTop и singleTask - ничего не работает! Есть ли у вас другие предложения? Спасибо!! – traintrax8

+0

Попробуйте удалить режим запуска. Любая причина, по которой вам нужно управлять своей деятельностью в независимых задачах? – Shaishav

ответ

1

Однако, если приложение отправлено на задний план и затем снова запущено с главного экрана, создается второй экземпляр приложения! Экран заставки снова отображается, и основное действие отображается на экране, а не последнее действие, которое было на экране пользователя!

Ожидаемое поведение Android. Кнопка «Назад» (, ее реализация по умолчанию) предназначена для того, чтобы пользователь мог уведомить систему о том, что он/она выполняется с текущим Activity, позволяя Android уничтожить экземпляр Activity.

Обратите внимание, что такое поведение не имеет ничего общего с атрибутом android:launchMode.

Это, очевидно, не желаемое поведение, и многие решения, которые я попытался, не работают.

Вы не можете изменить его. Речь идет о пользователе, который решил оставить Activity и ОС, уничтожив экземпляр Activity, который больше не нужен.

+0

Отлично благодарю вас за информацию! Вы знаете, как я могу принести приложение на передний план, когда они нажимают значок запуска, а не создают другой экземпляр? – traintrax8

+0

Если экземпляр жив, нажатие _ «значок запуска» _ приведет его на передний план, иначе будет создан новый экземпляр. Вместо того, чтобы бороться с описанным сценарием, я рекомендую использовать обратные вызовы 'lifecycle '(https://developer.android.com/guide/components/activities.html#Lifecycle)' Activity' и сохранять состояние пользовательского интерфейса в ' onSaveInstanceState() ', то, когда пользователь вернется к нему, восстановите состояние в' onRestoreInstanceState() '. Поступая таким образом, пользователь будет думать, как исходить из того места, где он оставил «Активность». – Onik

+1

Отлично! Спасибо за информацию! Это было очень полезно! Я попытаюсь реализовать это решение сейчас! Спасибо! – traintrax8

0

Ситуация решена удалением android:launchMode="singleInstance"> от везде кроме тега <application>. По-видимому, режим запуска лучше всего использовать, когда целью является создание другой задачи, что не было желательным поведением. Android Android скрыл это поведение, в то время как модифицированная версия Android с Touchwiz этого не сделала.