Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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_Crash_Recreate - Fatal编程技术网

尝试从自身重新加载Android活动不起作用

尝试从自身重新加载Android活动不起作用,android,crash,recreate,Android,Crash,Recreate,我的问题是:我想不出一个方法来重新启动我的活动本身。例如,在一个游戏中,如果你死了,有一个带有重试选项的菜单,可以立即重新启动舞台。事实就是这样 正如我从许多其他人的答案中所读到的,有两种主要的重新加载活动的方法: 1-finish(); startActivity(getIntent()) 2-重新创建() 第一个方法似乎对我不起作用,因为它重新启动了活动,但在我的堆栈后面打开了上一个创建的方法。看起来finish()语句没有完成它的工作。我试着把它放在前面,后面,还有各种各样的方式,但它从来

我的问题是:我想不出一个方法来重新启动我的活动本身。例如,在一个游戏中,如果你死了,有一个带有重试选项的菜单,可以立即重新启动舞台。事实就是这样

正如我从许多其他人的答案中所读到的,有两种主要的重新加载活动的方法:

1-
finish();
startActivity(getIntent())

2-
重新创建()

第一个方法似乎对我不起作用,因为它重新启动了活动,但在我的堆栈后面打开了上一个创建的方法。看起来finish()语句没有完成它的工作。我试着把它放在前面,后面,还有各种各样的方式,但它从来没有结束留下的活动

另一方面,无法从UI线程外部调用选项2(据我所知),如果我这样做,应用程序就会崩溃。我尝试使用以下方法调用重新创建方法:

    Activity.this.runOnUiThread(new Runnable() {
        public void run() {
            recreate();
        }
    });
但这种方法让我的屏幕上出现了可怕的闪烁。突然出现一个黑屏,这似乎不正确。

试试这个:

    Intent intent = getActivity().getIntent();
    getActivity().finish();
    startActivity(intent);
试试这个:

    Intent intent = getActivity().getIntent();
    getActivity().finish();
    startActivity(intent);

您应该在意图中添加
FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK
标志,例如:

Intent intent = getActivity().getIntent();
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
getActivity().finish();
startActivity(intent);

这将迫使系统从堆栈中删除上一个任务。

您应该在意图中添加
标志\u活动\u新任务|标志\u活动\u清除\u任务
标志,例如:

Intent intent = getActivity().getIntent();
intent.setFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
getActivity().finish();
startActivity(intent);

这将迫使系统从堆栈中删除上一个任务。

谢谢您的回答。这对我来说很有效,但活动没有结束。它不断地在堆栈中添加越来越多的活动副本。看起来aldakur的答案更符合我的需要。我只是在清单上添加了一行额外的代码,以确保系统不接受该特定活动的更多实例,使用:
android:launchMode=“singleInstance”
。感谢您的回答。这对我来说很有效,但活动没有结束。它不断地在堆栈中添加越来越多的活动副本。看起来aldakur的答案更符合我的需要。我只是在清单上添加了一行额外的代码,以确保系统不接受该特定活动的更多实例,使用:
android:launchMode=“singleInstance”