startActivity:哪种方法更好,为什么?

时间:2019-01-24 09:09:12

标签: java android kotlin

好,让我们简单点吧。

除了默认的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
        }
    }
}

问题:

  1. 哪种方法更好?为什么?

我见过大多数resources建议使用第二种方法。可能是什么原因?

  1. 这些方法中的任何一种都会发生内存泄漏吗?

1 个答案:

答案 0 :(得分:1)

一个更多是命令模式,而两个是一种工厂模式。尽管两者都做同样的(据说),但一个存在一个问题:实际上,它缺少调用方的上下文。如果需要在Intent上进行配置,这可能取决于当前状态或呼叫的来源,则将无法应用它。可以将其从最近的活动中排除,或者禁用历史记录或清除任务或其他任何内容。

因此最好选择 Two 以确保安全和一致。无论如何,您都不存储对context的引用,因此不会泄漏它。