Java 静态与非静态活动意图调用方法

Java 静态与非静态活动意图调用方法,java,android,android-intent,static,static-methods,Java,Android,Android Intent,Static,Static Methods,这里我有点混淆了静态意图调用方法和直接意图调用。从记忆的角度来看,创建新活动的更好选择是什么 据我所知,如果使用静态调用intent方法,它将包含应用程序生命周期的内存。这是真的还是假的 让我们举个例子: 在活动B中 public static Intent newIntent(Context context) { Intent intent = new Intent(context, B.class); return intent; } 从活动A调用活动B

这里我有点混淆了静态意图调用方法和直接意图调用。从记忆的角度来看,创建新活动的更好选择是什么

据我所知,如果使用静态调用intent方法,它将包含应用程序生命周期的内存。这是真的还是假的

让我们举个例子:

在活动B中

public static Intent newIntent(Context context) {
       Intent intent = new Intent(context, B.class);
       return intent;
   }
从活动A调用活动B

 startActivity(B.newIntent(this));
在活动A中

 startActivity(B.newIntent(this));

换句话说,直接调用活动不能在finish()调用活动之后继续。对吧?

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

不过,我想从代码和记忆的角度来看,第二个更好。但我看到许多项目包含第一个(静态调用)方法。因此,我想知道调用新活动的更好选择是什么?

方法
public static Intent newIntent()
是静态的,但这就是静态的。此静态方法的用途是,您可以调用
B.newIntent()
,而不需要
B
的实例

传递给
B.newIntent(this)
的上下文不是静态的,因此在
A
B
中创建意图并不重要

这是一个很好的例子

startActivity(B.newIntent(this));
在一个国家里,与此没有什么不同

startActivity(newIntent(this));

private Intent newIntent(Context context) {
   Intent intent = new Intent(context, B.class);
   return intent;
}
所以我想知道什么是调用新活动的更好选择

在功能上它没有区别。如果在内存使用上有任何差异,它将是如此之小,以至于你不会注意到它


就编码风格而言,最好将意图的创建保持在
A
中,因为
A
正在开始
B
,而
B
不应该关心
A
如何处理它。

依我之见,如果您的活动B必须以一些特定的附加或意图标志开始,那么第一个是好的,而活动A不需要知道这些。如果活动意图只是一个普通的意图,我认为它只是一个爱好。我的问题是它是否会包含额外的内存,然后正常调用?我认为在BaseActivity中创建公共意图调用会很好。我们还可以管理堆栈清除、完成等,正如您所说的“如果内存使用存在任何差异,那么它将非常小,您不会注意到。”我注意到它包含超过15 MB的堆大小。它是否方便,还面临着在使用静态方法调用每个新活动时增加堆大小的问题。@JayeshKhasatiya 15 MB堆在不同的设备上不“相等”。如果你的代码都是
startActivity(B.newIntent(this))这更有可能是内存泄漏,
无法GC,并使内存保留引用,直到使用并销毁“B意图”。堆应该总是有一些(7MB+)分配的内存,因为Linux(Android下)可能会使用它进行分页。要回答,
所以我想知道调用新活动的更好选择是什么?
无。两者都取决于设备及其背后的数据。我优先考虑
startActivity(B.newIntent(this))向类中添加静态方法不会增加15 MB,您到底在测量什么?@TimCastelijns:在每个活动中定义相同的方法“newIntent(Context-Context)”。。。这是一个好的代码标准吗?如果这也可以通过在baseActivity中定义一个方法来实现的话。即使没有使用静态也!!在每个活动中定义相同的代码不是一个好标准。重复的代码应该重构为一个BaseActivity类,是的。但我们不应该在这里讨论代码样式首选项