活动流程:单击我的应用程序图标将onCreate MainActivity

时间:2016-01-01 10:09:34

标签: android android-manifest android-lifecycle intentfilter launchmode

在我的应用程序中,我从MainActivity导航到Activity B.然后按HOME按钮,然后再次单击应用程序图标以最大化它。

而不是onResuming我的活动B,它返回到MainActivity。

这是有道理的,因为在我的AndroidManifest.xml中,当您点击其图标时,我使用普通的intent-filters启动MainActivity:

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTask"
        android:label="MyApp"
        android:windowSoftInputMode="adjustPan">

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

    </activity>

我正在检查像facebook和twitter这样的流行应用,当你从facebook Feed导航到朋友页面然后按HOME按钮时,他们似乎都没有遇到这个问题。然后再次点击应用图标,它仍然在您朋友的页面上。

当我点击应用图标时,这似乎只会影响应用。例如,如果从MainActivity转到活动B,请按HOME按钮,然后按SQUARE按钮显示我在后台运行的所有应用程序,选择我的应用程序在后台再次最大化,应用程序将正确返回到活动B.

如何确保在点击应用图标时,onResumes活动B代替?

1 个答案:

答案 0 :(得分:0)

从清单

中删除android:launchMode="singleTask"

来自Android launchMode doc,

  

&#34; singleTask&#34;和&#34; singleInstance&#34;活动只能开始一项任务。   它们始终位于活动堆栈的根部。而且,   设备一次只能容纳一个活动实例 - 只有一个   这样的任务。

来自Android back stack singleTask doc,

  

系统创建一个新任务并在该实例处实例化活动   新任务的根源。但是,如果活动的实例已经存在   在一个单独的任务中,系统将意图路由到   现有实例通过调用其onNewIntent()方法来代替   而不是创建一个新实例。只有一个活动实例可以   一次存在。

     

注意:虽然活动在新任务中启动,但“后退”按钮   仍然将用户返回到上一个活动。

希望这会对你有所帮助。