当从后台到前台而不是堆栈中的最后一个活动时,Root Activity会一次又一次地被调用

时间:2014-12-19 21:23:29

标签: android cordova ibm-mobilefirst

我正在使用IBM worklight开发混合应用程序,我必须在现有webview(Cordova webview)的顶部打开另一个webview,所以我创建了一个新活动(WebView Activity)来加载我的外部页面,但是当我通过按主页按钮转到webview活动的后台并再次进入前台我的MainActivity被调用并重新启动应用程序,我在清单文件中使用了singleTop作为我的MainActivity

            <activity android:name=".MainActivity"
              android:label="@string/app_name" 
               android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"
               android:launchMode="singleTop"
              >
          <intent-filter> 
            <action android:name="android.intent.action.MAIN"/>  
            <category android:name="android.intent.category.LAUNCHER"/> 
        </intent-filter>  
        <intent-filter> 
            <action android:name="com.main.sample.NOTIFICATION"/>  
            <category android:name="android.intent.category.DEFAULT"/> 
        </intent-filter>

    </activity> 
    <activity android:name=".WebViewActivity"
              android:label="@string/app_name" 
              android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"
              android:launchMode="singleTop"
              android:theme="@style/Theme.Transparent">

    </activity> 

我不知道为什么会发生这种情况,我希望我的上一次活动能够恢复而不是主要活动

1 个答案:

答案 0 :(得分:1)

阅读模式的文档。这将向您解释正在发生的事情:

  

&#34; singleTask&#34;和&#34; singleInstance&#34;,只应在&gt; activity有一个ACTION_MAIN和一个CATEGORY_LAUNCHER过滤器。 &GT;想象一下,例如,如果缺少过滤器会发生什么:&gt;意图启动&#34; singleTask&#34;活动,发起新任务,&gt;用户花费一些时间在该任务中工作。然后用户按下&gt;主页按钮。该任务现在被发送到后台并且不是>可见。现在用户无法返回任务,因为它是&gt;没有在应用程序启动器中表示。

这是一个潜在的解决方案。有多种方法可以做到这一点。 尝试在Manifest中指定为Launcher Activity的活动的onCreate方法中使用以下代码:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    finish();
    return;
}

这将在显示Launcher活动之前通过检测到已经有任务正在运行来完成,并且您的应用应该恢复到最后一个可见的活动。