我有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()中调用了基本构造函数。
答案 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+O
或Code > Override methods
,您可以在那里看到该方法所属的位置
答案 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" ? (如果您的应用程序不需要是单实例,请考虑删除。 但我的情况我需要单例。因此我进入下一步)
使用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() 方法。