onCreate 流程在 finish() 之后继续

2024-03-06

我想从内部完成一项活动onCreate方法。当我打电话时finish(), onDestroy()不会立即调用,代码不断流过finish(). onDestroy()直到之后才被调用onCreate()右大括号。

Per the onCreate()描述位于developer.android.com/reference。

您可以从此函数中调用 finish(),在这种情况下 onDestroy() 将立即被调用,而无需执行任何其余操作 活动生命周期(onStart()、onResume()、onPause() 等)正在执行。

我问的原因是:我想检查传递到的捆绑包中的数据onCreate()。当然,我可以控制传递给的内容onCreate,但我还是认为应该在交货时检查一下。

我的代码包含类A,启动 ActivityB。我相信最后两个“if 子句之外”标签不应该被调用,因为finish方法中的if声明应该已经破坏了该活动。它与 if 子句无关,因为第二个之后的标记行finish()调用仍还读。

My Code:

Class A

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // goToBButton: when pressed sends message to class B.    
    Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
    goToBButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick (View v) {      
            Log.i(TAG,"A Class: goToBButton, onClick");
            Intent i = new Intent(A.this, B.class);
            startActivityForResult(i,REQ_TO_B);
        }       
    });                
} // end onCreate

我的代码B类

    public class B extends Activity{

private static final String TAG = "tag";

@Override
   public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layoutb);

  // set as true, should always print Tag: one line before first finish"
  if (true)  {

    Log.i(TAG,"B Class: one line before 1st finish");
    finish();
  }

  // shouldn't get here after first finish
  Log.i(TAG,"B Class: outside of if clause, before second finish");
  finish();
  // shouldn't get here after second finish
  Log.i(TAG,"B Class: outside of if clause, after finish");                  
   } // end onCreate


@Override
public void onStart () {
    super.onStart();
    Log.i(TAG,"B Class: onStart");
}

@Override
public void onRestart() {
    super.onRestart();
    Log.i(TAG,"B Class: onRestart");
}

@Override
public void onResume () {
    super.onResume();
    Log.i(TAG,"B Class: onResume");
}

@Override
public void onPause () {
    super.onPause();
    Log.i(TAG,"B Class: onPause");
}

@Override
public void onStop () {
    super.onStop();
    Log.i(TAG,"B Class: onStop");
}

@Override
public void onDestroy () {
    super.onDestroy();
    Log.i(TAG,"B Class: onDestroy");
}

 } // end B Class

这是我的标签的结果:

11-26 15:53:40.456:信息/标签(699):A类:goToBButton,onClick

11-26 15:53:40.636:信息/标签(699):A类:onPause

11-26 15:53:40.865:INFO/tag(699):B 类:第一次完成前一行

11-26 15:53:40.896: INFO/tag(699): B 类:if 子句之外, 第二次完成之前

11-26 15:53:40.917: INFO/tag(699): B 类:在 if 子句之外, 完成后

11-26 15:53:41.035:信息/标签(699):A 类:onResume

11-26 15:53:41.165:信息/标签(699):B 类:onDestroy


我猜测这是因为 finish() 不会导致 onCreate 方法返回。您可以尝试简单地添加

finish();
return;

或者使用 if else

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layoutb);
  if(good data){
      //do stuff
  }else{
      finish();
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

onCreate 流程在 finish() 之后继续 的相关文章

随机推荐

  • android 使用 AudioTrack 播放声音

    你好 我有这个代码 AudioTrack audioTrack public void playAccordeon int minBufferSize AudioTrack getMinBufferSize 44100 AudioForma
  • static_cast(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

    我在无法访问 C 标准库的环境中编写 C 代码 特别是无法访问std numeric limits 假设我想实现 template
  • 如何使用 API (curl) 编辑 github 问题? (特别是:关闭)

    我计划将另一个 本地 系统中跟踪的数百个错误迁移到 GitHub 的问题系统中 大多数这些错误在过去都已被修复 我可以使用 github 的 API 来创建问题 例如 curl u GITHUB TOKEN x oauth basic ht
  • 片段添加或替换不起作用

    我正在使用这里的代码参考 http developer android com guide components fragments html When I put in that code in my program I get an e
  • 如何从Sqlite获取最后一条记录?

    我有一张桌子question table和一个ImageButton Back 单击后我需要从数据库中获取最后插入的记录Back 我的行包含以下列 question optionA optionB optionC optionD 我需要这些
  • 关于java设计模式的建议

    我需要一些关于 Java 中以下问题的设计模式的有用建议 我有三门课 class A extends X implement Y doA class B extends X implement Y doB class C extends X
  • 如何在 Spark SQL 中压缩两个数组列

    我有一个 Pandas 数据框 我尝试首先将包含字符串值的两列连接到一个列表中 然后使用 zip 我用 连接列表的每个元素 我的数据集如下 df column 1 abc def ghi df column 2 1 0 2 0 3 0 我想
  • Spring MVC 中的 WebRequest 和 HttpServletRequest

    两者有什么区别 两者都有一个getParameter方法以及setAttribute方法 那么两者的区别在哪里呢 1 一般情况下使用哪一种更好 2 请说明具体的使用场景 The WebRequest 的 javadoc http docs
  • pop eip 指令合法吗?

    我正在参加大学的理论考试 并被问到这个问题 经过一些指令后 esp 增长了 4 eip 增长了 20 该指令可能是什么 我标记了 pop eip 和 ret nasm 32位汇编中是否可以执行pop eip指令 pop eip不是真正的 x
  • 在 Shopify 中更新/删除购物车属性

    我使用购物车属性将每个产品的额外信息添加到购物车 从产品页面 我专门使用购物车属性 over 行项目属性因为客户需要能够稍后按订单编辑此信息 而订单项属性不允许 添加信息工作得很好 当客户决定从购物车中删除商品时 问题就出现了 因为尽管该商
  • 毕达哥拉斯三倍效率

    我需要创建一个函数 它接受整数列表并返回列表中是否存在毕达哥拉斯三元组 例如 3 5 7 4 回报True因为 3 4 5 是毕达哥拉斯三元组 到目前为止我有这个 Python def containsPythagoreanTriple a
  • 如何 boost::bind 到传递并返回 std::string 的托管类的成员?

    我正在尝试做一些非常类似的事情this https stackoverflow com questions 163757 how to use boostbind in c cli to bind a member of a managed
  • 找不到记录器“apscheduler.scheduler”的处理程序

    from apscheduler scheduler import Scheduler import os class ListHref def init self print In ListHref Class self name hre
  • 如何计算 pandas 中每个唯一值的出现次数

    我有一个大的 pandas 数据框 我想计算其中每个唯一值的出现次数 我尝试遵循 但需要花费大量时间和内存使用量 我怎样才能以Pythonic的方式做到这一点 pack for index row in packets iterrows p
  • 动态禁用 jQuery Datepicker 图标

    我对 jQuery 相当陌生 并且我一直在寻找一个像样的免费日期选择器有一段时间了 我对 jQuery UI 的日期选择器非常满意 但我遇到了障碍 我使用它的项目要求我在文本框旁边有一个图标 虽然这相当简单 但我不知道如何动态禁用该图标 有
  • 在 MATLAB 中单击图像时从指针获取索引值

    如何找到点击点的索引并将其添加到数组 列表或向量的末尾 h figure image result locx locy while ishandle h pos get 0 PointerLocation locx end 1 pos 1
  • RuntimeException:在注册表中找不到应用程序“”。

    背景 目标 我尝试在 Windows 7 64 位上安装 Simics Tools for Eclipse 插件 我正在使用 Eclipse Indigo for Java 64 位 为了解决这个问题 我决定在当前设置旁边安装 32 位版本
  • 将 LWJGL java 应用程序放入 jpanel 或 canvas 中

    随着 lwjgl 3 的新更新 类 Display 不存在 我到处搜索 但找不到任何有关如何将所有 lwjgl 应用程序放入 jpanel 或画布或类似内容的内容 我已经想过使用像 twl 这样的 opengl gui 但这会让一切变得更加
  • iOS 6 中的分段控件tintColor

    我有一个有 8 段的分段控件 我可以更改整个控件的默认色调 但是我可以为控件中的每个部分设置不同的颜色吗 我找到了一个在 5 1 中使用的教程 其中有一个调用此方法的新类 void setTintColor UIColor color fo
  • onCreate 流程在 finish() 之后继续

    我想从内部完成一项活动onCreate方法 当我打电话时finish onDestroy 不会立即调用 代码不断流过finish onDestroy 直到之后才被调用onCreate 右大括号 Per the onCreate 描述位于de