Запуск приложения из меню последние не запускает основное действие


У меня есть 3 вида деятельности (MainActivity, TwitterActivity, WebBrowserActivity). WebBrowserActivity использует для показа веб-информации из twitter.

Манифест: 1.

      <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>

2.

   <activity
    android:name=".TwitterActivity"
 android:label="@string/app_name"
 android:launchMode="singleInstance" >

<!-- Used for OAuth callback -->
<intent-filter>
    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
        android:host="callback"
        android:scheme="x-bker-oauth-twitter" />
</intent-filter>
</activity>

3.

  <activity android:name=".TwitterWebBrowser" />

Запуск Твиттера:

  Intent myIntent = new Intent(mContext, TwitterActivity.class);    
  mContext.startActivity(myIntent);

Когда twitt публикуется, я закрываю TwitterActivity (используя метод finish ();) и MainActivity показывает. Чем я нажму кнопку Home и перейду на Android, чем нажму кнопку home и нажму значок моего приложения, и я перейду на TwitterActivity, но мне нужно перейти на Основная активность. Как это сделать?

Это только на android версии 2.3.7 и ниже.

1 2

1 ответ:

В вашей записи манифеста для TwitterActivity измените android:launchMode="singleInstance" на android:launchMode="singleTop".

Я думаю, что вы устанавливаете launchMode, потому что вы хотите иметь возможность перейти к приложению Twitter или веб-странице, чтобы авторизовать пользователя из TwitterActivity, а затем вернуться обратно к тому же экземпляру вашего TwitterActivity, когда это будет сделано. В этом случае TwitterActivity будет находиться в верхней части стека задач, поэтому singleTop попросит систему повторно использовать его.

Проблема с singleInstance заключается в том, что она делает деятельность единственной активность в решении задач, что, вероятно, объясняет, почему в меню "Недавние" запускает TwitterActivity. (подробнее вactivity element docs).

Если вам действительно нужно использовать singleInstance, Вы должны рассмотреть возможность присвоения ему его собственной задачи и исключения его из недавних, например (используйте свое собственное имя для taskAffinity):

<activity
  android:name=".TwitterActivity"
  android:label="@string/app_name"
  android:launchMode="singleInstance"
  android:taskAffinity="com.example.twitter"
  android:excludeFromRecents="true">