Java startActivity:哪种方法更好?为什么?
好的,让我们把这个简单化 除了默认设置外,我有两种启动活动的方法 One:使用静态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
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个或更多参数时才有用。