onCreate没有被调用


77

我有2个活动:第一个活动用户单击一个按钮,启动第二个活动。第二活动完成所有工作。

我按如下方式启动第二个活动,该活动位于onClickListener内部类中,并且我尝试使用(FirstActivity.this,Simple.Class)显式调用它,但是发生了同样的事情。

    Intent test = new Intent(arg0.getContext(),Simple.class);
    startActivity(test);

在模拟器上,我看到屏幕像调用第二个活动一样移动,但是我得到的只是一个黑屏,但是布局没有加载任何内容。我看着logcat,我确实看到了一些装订器线程失败的消息。这是我第二次活动中的onCreate函数,但我从屏幕或logcat都没有得到任何结果,这表明Log函数被调用:

    public void onCreate(Bundle savedState)
    {
       Log.d("SimpleActivity","OnCreate Started");

       super.onCreate(savedState);
   setContentView(R.layout.simple);

       Log.d("SimpleActivity","OnCreate Ended");
    }

注意:我在上面的代码中使用super.onCreate(savedState)在OnCreate()中调用了基本构造函数。


发布更多代码,以便我们可以看到arg0是什么。您可能不应该使用任何内容。使用YourActivity.this作为传递给新意图的上下文。
FoamyGuy 2011年

你解决了吗?您在视图中是否有直接实例化的片段?
亚当·门多萨

Answers:


282

我发生的事情是我改写了错误的onCreate方法。public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)当我真的需要覆盖时,我就覆盖了protected void onCreate(@Nullable Bundle savedInstanceState)。也许这可以帮助某人!


19
谢谢,确实如此!
mrpeardotnet '16

3
这个愚蠢的错误使我花了至少一个小时才找到...该死,public void onCreate
拉斐尔·罗耶·里瓦尔德

2
oncreate(&enter将我放在这里大声笑。自动完成应该使工作更容易吗?
Vihaan Verma 16'Dec 20'17

4
感谢Google将“ void onCreate(Bundle savedInstanceState,PersistableBundlepersistentState)”设置为代码完成的默认方法。Grrrrrrr
卡洛斯

2
感谢Google让我们能够专注于应用程序开发:D
Andrea Cioccarelli

7

如果该活动从未被破坏过,或者由于某种原因某个活动挂起,则可能无法调用onCreate,下次实例化该活动时,它不会重新创建而是恢复。

至少这就是我现在在我的代码中处理的内容。Activity的生命周期似乎是一个很好的逻辑解释。.但是,我有99%的时间确实依赖于在启动Activity时调用Create,并且它并不会令我失望。 。

编辑:当然,这是因为退出活动时我没有调用finish()。h


1
这个答案为我解决问题提供了线索。在我的情况下,Activity在对象标志的条件下完成,并将其放置在处理程序的可运行代码中。但是该对象在执行可运行对象之前变为null。感谢那。
jrhamza 2015年

这就是我的情况,直接转到onPause,onCreated没有被调用。
live-love

2

这与该特定问题无关,但是当清单文件中未声明活动时也可能发生这种情况。



0

您需要调用该super.onCreate(savedState)方法。看一下Activity doc

 public void onCreate(Bundle savedState)
    {
     super.onCreate(savedState);
    }

0

您应该@Override onCreate并添加super.onCreate()到其中

@Override
public void onCreate(Bundle savedState)
{
   super.onCreate(savedState);

   Log.d("SimpleActivity","OnCreate Started");
   setContentView(R.layout.simple);
   Log.d("SimpleActivity","OnCreate Ended");
}

0

请注意,如果您的方法属于AppCompatActivityActivity

这取决于您对课程实施的内容

如果要添加生命周期或任何替代方法,建议您按 CTRL+O或执行Code > Override methods,在那里您可以看到该方法所属的位置

出于说明目的的屏幕截图-Android Studio的“替代方法”对话框

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.