每次点击该链接时,我都会有navView及其链接到另一个活动 它创建了一个新的活动实例。
如果用户点击链接3次,则会创建3个不同的实例。
我想第一次只创建一个实例,然后重新打开
Intent photosIntent = new Intent(Videos.this, Photos.class);
Videos.this.startActivity(photosIntent);
答案 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
的任何现有实例带到堆栈顶部(即:屏幕上可见),即使它尚未位于顶部。
注意:请勿使用其他人建议的特殊启动模式singleInstance
或singleTask
。这些对你没有帮助,他们会表现出特别的魔力,这可能会让你以后撕掉你的头发。如果您愿意,可以为这些活动指定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详细解释了它们的特征。