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
Android 以意图启动的活动的一个实例_Android_Android Lifecycle - Fatal编程技术网

Android 以意图启动的活动的一个实例

Android 以意图启动的活动的一个实例,android,android-lifecycle,Android,Android Lifecycle,我有一个活动,它是通过一个按钮从另一个活动开始的,并且在开始时会传递一个意图。 我现在明白了,活动会被创建几次,因为它是以一个意图启动的,每次我点击上面提到的按钮时都会调用onCreate()。在我阅读的文档中,它说“每当有一个“标准”活动的新意图时,就会创建一个类的新实例来响应该意图”,因此我假设堆栈上的某个地方有多个该活动的实例。这是我想要避免的,因为活动有一些静态变量,这些变量是从其他活动引用的,我想确保这个变量的值是确定性的 我想要的是,当我按下按钮时,除去所有现有实例并创建活动的新实例

我有一个活动,它是通过一个按钮从另一个活动开始的,并且在开始时会传递一个意图。 我现在明白了,活动会被创建几次,因为它是以一个意图启动的,每次我点击上面提到的按钮时都会调用onCreate()。在我阅读的文档中,它说“每当有一个“标准”活动的新意图时,就会创建一个类的新实例来响应该意图”,因此我假设堆栈上的某个地方有多个该活动的实例。这是我想要避免的,因为活动有一些静态变量,这些变量是从其他活动引用的,我想确保这个变量的值是确定性的

我想要的是,当我按下按钮时,除去所有现有实例并创建活动的新实例,或者确保只有一个活动,并且每次都以新的意图创建它

我试图通过为活动设置android:launchMode=“singleTop”并实现onNewIntent(intent)来实现这一点。这应该确保在这个场景中我只有一个活动实例,并且我得到了新的意图。然而,如果我这样做,我基本上必须复制整个onCreate()方法,但只是使用新的意图,这感觉是错误的

public void onNewIntent(Intent intent) {
    myAdapter= null;
    serverThread.stopThread();
    serverThread = null;
    this.onCreate(...);  // <- somehow do all this with new intent
}
public void onNewIntent(意图){
myAdapter=null;
serverThread.stopThread();
serverThread=null;

this.onCreate(…);//您可以将所有代码从onCreate()移动到onStart(),以确保每次打开该活动时都调用它

尝试将标志\u activity\u REORDER\u设置为\u FRONT 它将确保如果堆栈中存在一个活动,它将把该活动放在最前面

Intent intent = new Intent(getApplicationContext(),
            YourCustomActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

在上述情况下,当用户使用创建意图并启动活动的按钮导航回上一个活动时,实际上会调用onDestroy()。也就是说,实际上在这种情况下,该活动已经只有一个实例,而上一个实例正在被销毁

因此,在上述设置中未调用onNewIntent()。如果您想停止服务器(如问题中的代码所示),以便在再次按下按钮时可以启动新的服务器,则实际上可以简单地执行以下操作:

@Override
public void onDestroy() {
    serverThread.stopThread();  
    super.onDestroy();
}

希望这对其他人有所帮助:)

嘿,但不幸的是,这不是我想要的。如果用户没有按所述按钮返回到活动,从而创建新的意图,我不希望活动设置为全新的。