android - 当从后台到前台而不是堆栈中的最后一个 Activity 时,根 Activity 被一次又一次地调用

标签 android cordova ibm-mobilefirst

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

            <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> 

我不知道为什么会这样,我希望恢复我的最后一个 Activity 而不是主要 Activity

最佳答案

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

"singleTask" and "singleInstance", should be used only when the > activity has an ACTION_MAIN and a CATEGORY_LAUNCHER filter. > Imagine, for example, what could happen if the filter is missing: An > intent launches a "singleTask" activity, initiating a new task, and > the user spends some time working in that task. The user then presses > the Home button. The task is now sent to the background and is not > visible. Now the user has no way to return to the task, because it is > not represented in the application launcher.

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

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

这将通过检测到已经有一个任务在运行来完成您的 Launcher Activity,然后您的应用程序应该恢复到最后一个可见的 Activity。

关于android - 当从后台到前台而不是堆栈中的最后一个 Activity 时,根 Activity 被一次又一次地调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574078/

相关文章:

android - block 后代时关注 ListView 中的 EditText (Android)

audio - Phonegap上传的音频文件未在浏览器中播放

ssl - IBM MobileFirst 适配器调用 ssl 错误

android - 使用 IBM Worklight 和 IBM Bluemix 推送通知

android - 在Beta和发行版之间快速切换

android - 当我在 Gridview 中的 View 项目上放置图像时如何修复 gridview 项目大小(宽度和高度)

java - "Error initializing Network Connection: Class not found",源: file:///android_asset/www/cordova.js

tomcat7 - 为 Google Cloud Messaging 设置服务器端和客户端

android - 如何在动画之间添加延迟

android - Linkedin 如何在不通过浏览器的情况下如此快速地从电子邮件重定向到应用程序?