【问题标题】:Finish activity without waiting for completion完成活动而不等待完成
【发布时间】:2013-09-04 11:53:44
【问题描述】:

找到一种方法来完成一项活动而不等待它完成,这让我有点痛苦。 我知道一个简单的“回报”;声明可以解决问题,但在我的架构中我做不到。

我目前有:

public abstract class BaseFragmentActivity extends FragmentActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          if (savedInstanceState != null) {
               finish();
               return;
          }
     }
}

public class MainActivity extends BaseFragmentActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          /* code still executed here even when parent finish(); is called */
     }
}

一旦我的抽象类中的 finish() 被调用,我如何才能阻止 MainActivity 中的代码执行?

更新代码:

public abstract class BaseFragmentActivity extends FragmentActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          if (savedInstanceState != null) {
               finish();
               return;
          }
     }
}

public class MainActivity extends BaseFragmentActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          if (isFinishing()) {
              return;
          }
     }
}

奇怪的是,“返回”似乎有效,但我的 FragmentManager 不知何故在最后启动了片段。

【问题讨论】:

  • 你是在 MainActivity 中调用 super.onCreate() 吗?
  • 是的,我是。这实际上是第一行。我会在问题中更新它。
  • @Tomap 为什么是抽象类?在 if 之前也应该是 .call super。另请查看页面末尾的注释developer.android.com/training/basics/activity-lifecycle/…
  • 我有应用程序生命周期所需的抽象父方法。感谢您的“超级”电话,我解决了这个问题。 :)

标签: android android-activity activity-finish


【解决方案1】:

试着把它包起来

if(isFinishing()){

    //code you don't want to execute if finish() is called

}

【讨论】:

  • 谢谢,这正是我想要的。我用我的代码更新了我的答案。
【解决方案2】:

为什么不创建一个布尔值并将其设置为 true 并触发完成?

boolean end = false;

这就是事实

public abstract class BaseFragmentActivity extends FragmentActivity {
     protected void onCreate(Bundle savedInstanceState) {
end = true;
     }
}

然后使用if语句

public class MainActivity extends BaseFragmentActivity {
     protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
if(end = false){
//stuff here}
else {
finish();
}
     }
}

【讨论】:

  • 我实际上考虑过在父类中实例化一个抽象布尔属性,但我希望我错过了一个已经存在并完成我需要的事情的方法。如果我没有得到我正在寻找的答案,我会验证您的回复。 :)
  • 我正在寻找的布尔值是 triggs 回答的。我让你的评论很有用,我会验证他的回复。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2013-01-08
  • 2023-03-10
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多