oncreate()方法没有调用方法a,但onstart()调用方法a

62o28rlo  于 2021-06-26  发布在  Java
关注(0)|答案(2)|浏览(442)

我有一个oncreate()方法,如下所示:

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity);
  5. if (blah) {
  6. blahblah;
  7. } else {
  8. method1();
  9. }
  10. MethodA();
  11. }

onactivityresult方法如下所示:

  1. @Override
  2. protected void onActivityResult(int a, int b, Intent c) {
  3. super.onActivityResult(b, a, c);
  4. if (b == blah) {
  5. if (a == blah) {
  6. Method1();
  7. }
  8. }
  9. }

方法1():

  1. public void Method1() {
  2. blah
  3. }

我有一个methoda(),它应该第一次出现(在它没有出现的时候,除非我把methoda()放在onstart()中,然后它只在第二次尝试打开应用程序时出现)

  1. public void MethodA() {
  2. sets text on screen
  3. }
bn31dyow

bn31dyow1#

根据您所描述的,oncreate()方法的返回时间似乎早于预期。
如果正在设置布局(即setcontentview()调用已工作),那么methoda()肯定应该执行,除非如前所述,oncreate()方法在if或else块执行中返回得更早。使用调试器执行单步调试并单步跳过方法调用,例如if else块中的method1()。

  1. super.onCreate(savedInstanceState);
  2. setContentView(R.layout.activity);
  3. /* Did you check this If-Else block so that the control actually */
  4. /* goes down below? to MethodA() */
  5. if (blah) {
  6. blahblah;
  7. } else {
  8. method1();
  9. }
  10. MethodA();
  11. }
ltskdhd1

ltskdhd12#

据我所知,安卓系统应该叫它。从您提供的信息来看,我能做的调试和查找错误的工作有限,但我想知道您是如何检查函数是否被调用的。
从我读到的内容来看,您只依赖于视觉反馈来验证是否正在调用您的函数。
我不希望这样,尤其是在你的一个具体案例中,你告诉我它确实在两次发射后出现。
尝试使用logcat(默认集成在androidstudio中,而不是插件)检查函数是否被调用。首先验证oncreate是否在启动时被调用(根据我的经验应该是这样)。
在类的顶部编写静态成员变量(如果编写“logt”并按tab键,它会自动创建自己):

  1. private static final String TAG = "ActivityName";

在oncreate方法write中(如果您编写“logd”并按tab键,它会自动创建自己):

  1. log.d(TAG, "I am printing from the OnCreate method");

在logcat中,您可以在debugtagname上进行筛选。
https://developer.android.com/studio/debug/am-logcat
如果不是这个问题,请验证您是否正在处理片段或活动。在容器中,oncreate方法可能会在前面为片段调用(当它们不在屏幕上时)。这不应该引起任何问题,但是当项目以编程方式从另一个片段中移动或移除时,可能会引起任何问题。

相关问题