startActivity每次都创建新实例

时间:2018-04-02 08:35:57

标签: java android android-activity nav

每次点击该链接时,我都会有navView及其链接到另一个活动 它创建了一个新的活动实例。

如果用户点击链接3次,则会创建3个不同的实例。

我想第一次只创建一个实例,然后重新打开

Intent photosIntent = new Intent(Videos.this, Photos.class);
Videos.this.startActivity(photosIntent);

6 个答案:

答案 0 :(得分:0)

您可以检查实例是否为null。如果为null,则创建new,否则打开旧的。

答案 1 :(得分:0)

试试这个

;Yes

答案 2 :(得分:0)

这就是Android的工作原理。活动具有生命周期,一旦启动活动,每次都会创建一个新实例。同样,一旦你不再使用它就会被销毁(转到另一个活动,关闭应用程序等)

尝试在您的Android动态清单中添加android:launchMode="singleTop",看看它是否有效。

答案 3 :(得分:0)

创建类似private Intent photosIntent;

的类变量

替换这个:

Intent photosIntent = new Intent(Videos.this, Photos.class);

使用:

if(photosIntent == null){ photosIntent = new Intent(Videos.this, Photos.class); }

这应该可以正常工作

答案 4 :(得分:0)

为防止创建多个实例,您可以执行以下操作:

Intent photosIntent = new Intent(Videos.this, Photos.class);
photosIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Videos.this.startActivity(photosIntent);

如果Photos当前位于堆栈顶部(即:屏幕上可见),这将重用Activity的现有实例。

如果您有多个活动,并且希望确保只创建每个活动的单个实例,则可以执行以下操作:

Intent photosIntent = new Intent(Videos.this, Photos.class);
photosIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
Videos.this.startActivity(photosIntent);

这会将Photos的任何现有实例带到堆栈顶部(即:屏幕上可见),即使它尚未位于顶部。

注意:请勿使用其他人建议的特殊启动模式singleInstancesingleTask。这些对你没有帮助,他们会表现出特别的魔力,这可能会让你以后撕掉你的头发。如果您愿意,可以为这些活动指定android:launchMode="singleTop"

答案 5 :(得分:-1)

您可以尝试将android:launchMode与其中之一一起使用:

  • android:launchMode="singleTask"
  • android:launchMode="singleTop"
  • android:launchMode="singleInstance"

这里的用法示例:

<activity
    android:name=".YourActivity"
    android:label="activity name"
    android:launchMode="singleTask"
    android:taskAffinity="">

请注意以上选择有不同的特点。我认为singleTask更适合你。

这篇文章:Understand Android Activity's launchMode: standard, singleTop, singleTask and singleInstance详细解释了它们的特征。