Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用意图标志和androidmanifest_Java_Android_Android Intent_Service - Fatal编程技术网

Java 使用意图标志和androidmanifest

Java 使用意图标志和androidmanifest,java,android,android-intent,service,Java,Android,Android Intent,Service,我有一项服务可以启动一项活动(比如活动a),如下所示: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); getApplicationContext().startActivity(intent); 启动应用程序时,活动A会出现在应用程序的第一个活动之前 我有两种解决方案: (一) 将上述代码更改为:

我有一项服务可以启动一项活动(比如
活动a
),如下所示:

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        getApplicationContext().startActivity(intent);
启动应用程序时,
活动A
会出现在应用程序的第一个活动之前

我有两种解决方案:

(一)

将上述代码更改为:

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

启动活动并按home键后,我仍然可以在历史堆栈(
最近的任务
)中看到该活动。为什么

启动应用程序后,这两个任务合并为一个任务,应用程序的第一个活动位于顶部。但是任何其他应用程序,创建一个新任务,活动a的任务仍然保留。为什么

(二) 将上述代码更改为:

        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY
                | Intent.FLAG_ACTIVITY_NEW_TASK);
        getApplicationContext().startActivity(intent);
        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”

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

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


首选哪种选项?(或另一个?

一个快速修复方法是将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);
这并不能解决问题


希望这能有所帮助。

这是一种将第一个活动从堆栈中移除的方法

        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();

但我的问题不是多个实例。这是因为“主页”选项卡没有从历史堆栈中清除活动A历史堆栈和最近的应用程序之间有什么区别?虽然为所有活动应用程序维护了历史堆栈,但它是每个应用程序的堆栈,其中包含活动应用程序的活动列表,当活动结束时,它会被推到“后”堆栈上。