Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
如何在当前运行的应用程序中保留应用程序的单个Android实例_Android_Guava_Android Launcher - Fatal编程技术网

如何在当前运行的应用程序中保留应用程序的单个Android实例

如何在当前运行的应用程序中保留应用程序的单个Android实例,android,guava,android-launcher,Android,Guava,Android Launcher,我有一个android应用程序,它有两个活动,比如A和B,其中A是启动器活动。对于活动A,我注册了一个intent过滤器,它为特定URL打开应用程序。我希望在当前运行的应用程序中始终为我的应用程序设置一个任务。为了解决这个问题,我尝试了launchMode属性的不同组合: AsingleTop,Bstandard但当我通过intent URL访问应用程序时,我在当前运行的应用程序中有两个应用程序 AsingleTaskBstandard但每次我打开应用程序时,它都以活动A开始,即使应用程序已经用

我有一个android应用程序,它有两个活动,比如A和B,其中A是启动器活动。对于活动A,我注册了一个
intent过滤器
,它为特定URL打开应用程序。我希望在当前运行的应用程序中始终为我的应用程序设置一个任务。为了解决这个问题,我尝试了
launchMode
属性的不同组合:

A
singleTop
,B
standard
但当我通过intent URL访问应用程序时,我在当前运行的应用程序中有两个应用程序

A
singleTask
B
standard
但每次我打开应用程序时,它都以活动A开始,即使应用程序已经用活动B打开(在这种情况下,我希望恢复应用程序)

A
singleTask
B
singleTask
A
singleTask
B
standard

我希望我的应用程序具有相同的行为,例如gmail,在当前运行的应用程序中始终最多有一个实例,当我打开它并且后台已经有一个实例时,恢复它,如果我通过意图过滤器打开应用程序,我希望处理意图并相应地提供内容(例如,gmail在后台,我点击后收到一个新邮件通知,android保留一个gmail实例并显示新邮件)

我使用三星Galaxy Note 4和Android 6.0

问题已解决

我为我的问题找到了一个解决方案,可能不是最好的,但它很有效。首先,我添加了一个新的活动来捕获
intent过滤器
,该过滤器具有
launchMode=“SingleTask”
,并且在它的
onCreate
方法中,我发布了一个事件来杀死所有现有的活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ("android.intent.action.VIEW".equals(getIntent().getAction())) {
        // This Activity is started using an external app (eg: Gmail)
        // So start the app from the beginning 
        // (redirecting to Activity A)
        Intent mainIntent = getIntent(); // Copy the Intent used to launch me
        // Launch the real root Activity (launch Intent)
        mainIntent.setClass(this, StartActivity.class);

        // Post an event to kill all existing activities 
        // To do this i use Guava
        PubSub.getInstance().post(new KillActivityEvent());
        startActivity(mainIntent);
        finish();

    } else {
        //  The activity wasn't started by an external app
        finish();
    }
}

你可以使用碎片活动B太大,碎片对我没有帮助。你可以使用碎片活动B太大,碎片对我没有帮助。