【问题标题】:startActivity skips onCreate()startActivity 跳过 onCreate()
【发布时间】:2020-02-27 06:10:59
【问题描述】:

我有一个简单的Activity1 -> Activity2 案例。

过去当我使用startActivity(Intent(this, Activity2::class.java)) 时没有任何问题,并且会调用Activity2onCreate() 方法。

在我目前的情况下,这没有发生。我在onCreate() 方法中有日志,它们永远不会被击中。但是如果我创建一个onStart() 方法,它就会进入那里。但是,在我的应用程序生命周期的日志中,onCreate()Activity2 从未受到打击。这怎么可能。 onCreateonStart 之前的要求。

这是我上面引用的实际代码。

class Activity1 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Timber.d("onCreate")

        setContentView(R.layout.activity_splash)

        startActivity(Activity2.getIntent(this))
    }
}

class Activity2 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        Timber.d("onCreate") // Never gets touched
    }

    override fun onStart() {
        super.onStart()
        Timber.d("onStart"); // Is hit with no problems.
    }

    companion object {
        fun getIntent(@NonNull context: Context) : Intent {
            return Intent(context, Activity2::class.java)
        }
    }
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    您覆盖了错误的onCreate - 您不想使用PersistableBundle 版本。将您的 onCreate 更改为仅采用 savedInstanceState: Bundle? 参数:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Timber.d("onCreate") // Now it'll be called
    }
    

    【讨论】:

    • 该死......我觉得很愚蠢:(我应该删除这个问题吗?我不知道我是怎么搞砸的。
    • 不,它可能会帮助遇到完全相同问题的其他人。盯着看太久很容易错过:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-11-26
    • 2011-12-23
    相关资源
    最近更新 更多