静态 vs 非静态 Activity 意图调用方法

3

在静态Intent调用方法和直接Intent调用之间,我有些困惑。从内存角度来看,哪种方法更好用于创建新的Activity?

据我所知,使用静态Intent调用方法会占用应用程序的内存。这是真的吗?

让我们举个例子:

在B Activity中:

public static Intent newIntent(Context context) {
       Intent intent = new Intent(context, B.class);
       return intent;
   }

从Activity A调用Activity B

在Activity A中:

 startActivity(B.newIntent(this));

或者

直接调用活动无法在finish()后继续存在。对吗?

startActivity(new Intent(context, B.class));

我认为第二种方法从代码点和内存点的角度来看比第一种更好,但我也发现很多项目使用第一种(静态调用)的方式。因此,我想知道在启动新Activity时哪种调用方式更好?

在我个人的看法中,如果你的活动B必须使用一些特定的extras或意图标志来启动,而活动A不需要知道这些信息,那么第一个选项是好的。如果活动意图只是普通意图,我认为这只是品味问题。 - JacksOnF1re
我的问题是关于它是否会包含比普通调用更多的内存? - Jayesh Khasatiya
我认为在BaseActivity中创建通用Intent调用会很好。我们还可以管理STACK清除、finish等。 - Ronak Mehta
1个回答

1
方法public static Intent newIntent()是静态的,但仅此而已。使用这个静态方法的好处是你可以在没有B实例的情况下调用B.newIntent()
你传递给B.newIntent(this)的上下文不是静态的,因此无论你是在A还是在B中创建intent都没有关系。
在A中。
startActivity(B.newIntent(this));

在A中,这与此无异。

startActivity(newIntent(this));

private Intent newIntent(Context context) {
   Intent intent = new Intent(context, B.class);
   return intent;
}

所以我想知道调用新Activity的更好的选择是什么?

在功能上没有区别。如果有任何内存使用方面的差异,它将非常小,您不会注意到。

就编程风格而言,最好将意图的创建保留在A中,因为A正在启动BB不应关心A如何处理它。


根据你所说的“如果内存使用有任何差异,那么它会非常小,你几乎察觉不到。”我已经注意到它包含超过15 MB的堆大小,这是否方便?同时,每次调用静态方法时都会面临增加堆大小的问题。 - Jayesh Khasatiya
1
在一个类中添加一个静态方法不会使任何东西增加 15 MB,你到底测量了什么? - Tim
@JayeshKhasatiya,代码结构和个人偏好密切相关。我们可以自行决定如何编写代码。至于功能,没有任何区别。 - Tim
1
@TimCastelijns: 在每个活动中定义相同的方法“newIntent(Context context)”...这是一个好的代码规范吗?如果可以通过在基础Activity中定义一个单一方法来实现这一点,甚至不使用静态方法! - Punit Sharma
1
在每个活动中定义相同的代码并不是一个好的标准。重复的代码应该被重构为例如BaseActivity类。但我们不应该在这里涉及代码风格偏好。 - Tim
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接