gpt4 book ai didi

android - 如何阻止 startActivity 创建同一 Activity 的两个实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:36 28 4
gpt4 key购买 nike

Activity A 有一个按钮,在它的 onclick 中它启动了新的 Activity B,新的 Activity 只有最小的 onCreate 函数。

在 Activity A 中,我按下了一个使用

的按钮
startActivity(new Intent(A.this, B.class)) 

启动 Activity B。当我运行程序时,按下 Activity A 中的按钮, Activity B 启动,但我必须使用后退按钮两次才能退出并返回到第一个 Activity 。

我在单击 A 中的按钮时检查了 logcat,同时创建了两个相同的实例。我还尝试在 Activity B 的 onCreate 中使用 Toast 进行调试,这表明当我使用后退按钮时,它会调用另一个双胞胎中的 onCreate B Activity 。我找到这篇文章 Clicking the back button twice to exit an activity这没有回答问题。

我可以阻止它创建孪生实例的唯一方法是使用 tag:launchMode= "singleInstance" 明确限制它到 list 中的 Activity 。

问题依然存在:

  1. 为什么要创建两个实例?
  2. 如何阻止它或如何正确使用它以免发生这种情况?

更多解释:代码: Activity A 有一个 buttOnClick() 函数,其中有一个 switch(view.getId()) 检查单击了哪个按钮。每个案例都调用带有特定整数参数(按钮 ID)的函数动画。在此函数中,再次切换检查 id 并使用 setAnimationListener 运行与按钮对应的动画。在动画结束时,它要求开始一个新 Activity 。这是它的样子:

public void myButtonOnClick(View view)
{


switch (view.getId()) {

case R.id.button1:

animation(1);

break;
//....more lines..... }}
public void animation(int a){

//...code...

switch(a){

case 1:
anim.setAnimationListener(new AnimationListener() {

public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub

}

public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub

}

public void onAnimationEnd(Animation arg0) {
Intent in =new Intent(A.this, B.class);
startActivity(in.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ));
animClear();
}
});


break;
//......... other cases......}

最佳答案

Intent flags

我自己使用了一组FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 但这可能有点矫枉过正。

然后就

startActivity(new Intent(A.this, B.class).addFlags(intent_flags));

关于android - 如何阻止 startActivity 创建同一 Activity 的两个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076968/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com