Android - 启动器和后台堆栈行为

时间:2012-12-04 11:09:17

标签: android android-activity back-stack

如上所述here

  

当用户通过按Home键离开任务时,当前活动将停止,其任务将进入后台。 < ...>如果用户稍后通过选择开始任务的启动器图标来恢复任务,则任务将到达前台并在堆栈顶部恢复活动。

所以我准备了简单的测试

活动#1 ==带有onClick设置的文本标记和按钮

    public class FirstActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
    }

    public void onClick(View v)
    {
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
        startActivity(intent);
    }
}

活动#2 ==只是文字标记

    public class SecondActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
    }
}

并显示

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="10"/>
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="FirstActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <activity android:name="SecondActivity"
                  android:label="@string/app_name">
        </activity>

    </application>
</manifest>

Launcher图标不会向我显示上一个活动,它始终会启动第一个活动并将其放入堆栈。因此,在一项任务中,可能会有许多第一次和第二次活动。最近的应用列表中的图标启动堆栈中的最后一个活动。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

根据您启动应用的方式存在问题。如果您在尝试此操作时从IDE启动应用程序:请从options-&gt;应用程序停止您的应用程序。然后像往常一样从主屏幕启动您的应用程序。我希望在这种情况下,后台堆栈行为是正常的

答案 1 :(得分:0)

好的解决方法似乎是将此添加到您的第一个活动onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    // Activity was brought to front and not created,
    // Thus finishing this will get us to the last viewed activity
    finish();
    return;
  }

  // Regular activity creation code...
} 

此主题中的更多细节:Activity stack ordering problem when launching application from Android app installer and from Home screen