好,让我们简单点吧。
除了默认的startActivity
一个:使用静态start
方法
class LogInActivity : BaseAppCompatActivity() {
// other activity code goes here
companion object {
fun start(context: Context /*,extra params goes here*/) {
val intent = Intent(context, LogInActivity::class.java)
// intent.putExtra extra params
context.startActivity(intent)
}
}
}
两个:使用静态getStartIntent()
方法获取开始活动所需的Intent
class LogInActivity : BaseAppCompatActivity() {
companion object {
fun getStartIntent(context: Context /*,extra params goes here*/) : Intent {
val intent = Intent(context, LogInActivity::class.java)
// intent.putExtra extra params
return intent
}
}
}
问题:
我见过大多数resources建议使用第二种方法。可能是什么原因?
答案 0 :(得分:1)
一个更多是命令模式,而两个是一种工厂模式。尽管两者都做同样的(据说),但一个存在一个问题:实际上,它缺少调用方的上下文。如果需要在Intent
上进行配置,这可能取决于当前状态或呼叫的来源,则将无法应用它。可以将其从最近的活动中排除,或者禁用历史记录或清除任务或其他任何内容。
因此最好选择 Two 以确保安全和一致。无论如何,您都不存储对context
的引用,因此不会泄漏它。