0

我有一个启动活动(比如Activity A)的服务,如下所示:

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        getApplicationContext().startActivity(intent);

当我启动我的应用程序时,Activity A会出现在应用程序的第一个活动之前。

我有两个解决方案来解决这个问题:

1)

将上面的代码更改为:

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);

问题

启动活动并按主页键后,我仍然在历史堆栈(= recent tasks)中看到活动。怎么来的?

在我启动我的应用程序后,这两个任务合并为一个,应用程序的第一个活动位于顶部。但任何其他应用程序,创建一个新任务和任务Activity A仍然存在。怎么来的?

2)将上面的代码更改为:

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);

并添加到清单中:

   <activity
        android:name="org.achartengine.GraphicalActivity"
        android:taskAffinity="org.achartengine"
        >

其中Activity A= android:name="org.achartengine.GraphicalActivity"

问题:我保留了不必要的任务堆栈。

我假设很少有人从服务开始该活动。即便如此,他们也只会这样做一次。这意味着当用户单击主页/返回键时,从任何历史堆栈中清除活动会更加整洁。

哪个选项是首选?(或另一个?)

4

2 回答 2

1

一个快速的解决方法是将 android:launchMode="singleTop" 添加到清单中的活动中,这样只会有一个而不是多个实例。完成同样事情的另一种方法是在开始意图之前使用以下内容。

Intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

在清单中还有其他几种可能性可以尝试

android:noHistory="true"

并确保您正在打电话

finish();

结束这个意图。

对于活动或这两个意图标志的组合

Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

如果上述方法不起作用,我能想到的最后一件事是

moveTaskToBack(true);

这并不能解决问题。

希望这可以帮助。

于 2013-07-31T04:10:19.280 回答
0

这是一种将第一个活动保持在堆栈之外的方法。

        Thread nohistory = new Thread () {
        public void run () {
            try {
                Intent i = new Intent(Splash.this, ActivitySplash.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    nohistory.start();
于 2013-08-02T14:26:05.003 回答