从最近的菜单启动应用程序不会启动主要活动

时间:2013-01-24 12:46:32

标签: java android twitter

我有3个活动(MainActivity,TwitterActivity,WebBrowserActivity)。 WebBrowserActivity用于显示来自Twitter的Web信息。

清单: 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" />

启动twitter:

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

当发布twitt时,我关闭TwitterActivity(使用finish();方法)并显示MainActivity。我按下主页按钮并转到Android,而不是按主页按钮并按我的应用程序图标,然后我转到TwitterActivity,但我需要转到MainActivity。这是怎么回事?

仅适用于Android 2.3.7及更低版本。

1 个答案:

答案 0 :(得分:1)

在TwitterActivity的清单条目中,将android:launchMode="singleInstance"更改为android:launchMode="singleTop"

我认为您正在设置launchMode,因为您希望能够跳转到Twitter应用或网页以从TwitterActivity授权用户,然后在完成后返回到您的TwitterActivity的同一实例。在这种情况下,TwitterActivity将位于任务堆栈的顶部,因此singleTop将告诉系统重用它。

singleInstance的问题在于它使活动成为任务中唯一的活动,这可能解释了为什么最近菜单启动了TwitterActivity。 (activity element文档中的详细信息)。

如果您确实需要使用singleInstance,则应考虑将其分配给自己的任务,并将其从最近的任务中排除,例如(使用您自己的名称taskAffinity):

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