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

Java startActivity:哪种方法更好?为什么?,java,android,kotlin,Java,Android,Kotlin,好的,让我们把这个简单化 除了默认设置外,我有两种启动活动的方法 One:使用静态start方法 class LogInActivity : BaseAppCompatActivity() { // other activity code goes here companion object { fun start(context: Context /*,extra params goes here*/) { val intent = In

好的,让我们把这个简单化

除了默认设置外,我有两种启动活动的方法

One:使用静态
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)
        }
    }

}
Two:使用静态
getstartinent()
方法获取启动活动所需的
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
        }
    }
}
问题:

  • 哪种方法更好?为什么 我见过很多人建议使用第二种方法。原因可能是什么

  • 这些方法中有没有内存泄漏
    One更像是一种命令模式,而Two则是一种工厂模式。虽然两者都做相同的事情(据推测),one有一个问题:它实际上缺少调用方的上下文。如果您需要在
    Intent
    上进行配置,这可能取决于当前状态或调用的来源,您将无法应用该配置。这可以将其从最近的活动中排除,或者禁用历史记录,或者清除任务或其他任何内容


    因此,为了安全和一致,最好选择两个。在任何情况下,您都没有存储对
    上下文的引用,因此不会泄漏它。

    如果代码实际上不同,我看不出有什么区别。这两种方法将执行相同的命令。选择您更喜欢的模式使用
    newIntent
    模式的优点是可扩展性超出了默认函数提供的范围。使用前一种方法,您无法按照创建的意图执行任何操作。使用后者,您可以有更多的选项来修改调用activity.IMHO中的意图,与内联两行相比,使用这两种方法都没有什么优势(至少如果这么简单的话)。感觉有点过分了。@Henry是的,没错。这只在我在代码注释中提到的有2个或更多参数时才有用。