onCreate没有被调用

时间:2011-12-15 02:31:25

标签: android android-activity

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

我在onClickListener内部类中启动第二个Activity,如下所示,我尝试使用(FirstActivity.this,Simple.Class)显式调用它,但同样的事情发生了。

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

在模拟器上,我看到屏幕移动过来就像调用第二个活动一样,但我得到的只是一个黑屏,但我的布局中没有任何内容。我看了一下logcat,我确实看到一些binder线程失败的消息。这是我的第二个活动中的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()中调用了基本构造函数。

8 个答案:

答案 0 :(得分:205)

发生在我身上的是我压倒错误的onCreate方法。当我真的需要覆盖public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)时,我正在覆盖protected void onCreate(@Nullable Bundle savedInstanceState)。也许这可能对某人有帮助!

答案 1 :(得分:4)

如果活动从未被销毁,onCreate可能不会被调用, 如果由于某种原因一个活动挂起,下次实例化时它不会重新创建,而是重新开始......

至少那就是我现在在我的代码中处理...活动的生命周期似乎是一个很好的逻辑解释..但是99%的时间我依赖于onCreate在启动时被调用并且它不会让我失望....

编辑:当然是因为我在退出活动时没有调用finish()。卫生署。

答案 2 :(得分:1)

这与此特定问题无关,但在清单文件中未声明活动时也会发生这种情况。)

答案 3 :(得分: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");
}

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

请注意,如果您的方法属于 AppCompatActivity 活动

这取决于您对班级实施的内容

如果您想添加生命周期或任何覆盖方法,我建议您按 CTRL+OCode > Override methods,您可以在那里看到该方法所属的位置

Screenshot for illustrative purposes - Android Studio's "Methods to Override" dialog

答案 6 :(得分:0)

从清单中删除android:launchMode =“ singleTask”

答案 7 :(得分:0)

我的情况

(1) mainActivity -> (2) open Adapter - startActivity -> (3) mainActivity onCreate() 没有被触发。

我通过添加 finish(); 解决了这个问题。在主活动中。

按照以下步骤检查您的申请。

1.您是否覆盖了正确的方法?如果不覆盖下面的方法,这个方法将在你启动Activity时被触发。

protected void onCreate(Bundle savedInstanceState) { 
   super.onCreate(savedInstanceState);

2.确保您在 manifest.xml 中注册了 Activity

2.1 您的活动是否有 android:launchMode="singleInstance" ? (如果您的应用程序不需要是单实例,请考虑删除。 但我的情况我需要单例。因此我进入下一步)

  1. 使用finish()

     public void openSearch(View view) {
     Intent intent = new Intent(this, BookInfoActivity.class);
     intent.putExtra(...);
     startActivity(intent);
     finish(); // add like this.}
    

为什么我们需要使用“finish()”?

屏幕 A -> 点击 A 上的按钮 -> 屏幕 B -> 点击 B 上的按钮 -> 屏幕 A 带有一些您从屏幕 B 获得的新数据

如果您不调用 finish() 方法(在 A 按钮中),则表示 A 仍在您的后台 即使你看到的是屏幕 B。

因此,当您在屏幕 B 上触发 startActivity 时,它只会显示正在运行的 A 屏幕。

但是,如果您使用finish() 方法(在A 按钮中),当您转到B 屏幕时, 它会破坏 A 屏幕,因此当您通过单击 B 方法('StartActivity')返回 A 屏幕时,它会创建 A 屏幕并触发 onCreate() 方法。