【问题标题】:Static vs non static Activity intent calling method静态 vs 非静态 Activity 意图调用方法
【发布时间】:2016-08-11 12:04:54
【问题描述】:

在这里,我对静态意图调用方法与直接意图调用有点混淆。从内存的角度来看,创建 New Activity 的更好选择是什么?

据我所知,如果使用静态调用的意图方法包含应用程序生命周期的内存。是真是假?

举个例子:

在活动 B 中

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

从 Activity A 调用 Activity B

在活动 A 中

 startActivity(B.newIntent(this));

以其他方式直接调用活动不能在完成()调用活动后存活。对吧?

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

我仍然认为第二个比你的代码点和记忆点更好。但是我看到很多项目都包含第一个(静态调用)方法。所以我想知道调用新 Activity 的更好选择是什么?

【问题讨论】:

  • 以我的拙见,如果您的活动 B 必须以一些特定的附加或意图标志开始,那么第一个很好,活动 A 不需要知道这些。如果活动意图只是一个普通的意图,我认为这只是品味问题。
  • 我的问题是它是否包含额外的内存然后正常调用?
  • 我认为在 BaseActivity 中创建通用 Intent 调用会很棒。我们还可以管理 STACK clear ,finish 等。

标签: java android android-intent static static-methods


【解决方案1】:

public static Intent newIntent() 方法是静态的,但仅此而已。这个静态方法的用途是可以在没有B的实例的情况下调用B.newIntent()

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

这在 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 开始于B,而B 不应该关心A 如何处理。

【讨论】:

  • 正如你所说的“如果内存使用有任何差异,它会很小,你不会注意到它。”我注意到它包含超过 15 MB 的堆大小是否方便,并且还面临在使用静态方法调用的每个新活动中增加堆大小的问题。
  • @JayeshKhasatiya 15 MB 堆在不同设备上并不“相等”。如果您的所有代码都是startActivity(B.newIntent(this));,这更有可能是内存泄漏,this 不支持 GC,并且正在使内存保持引用,直到使用并销毁“B 意图”。堆应该总是有一些(7 MB+)分配的内存,因为 Linux(在 Android 下)可能会使用它进行分页。要回答,So I want to know what is better selection to calling new Activity? 无。两者都取决于设备及其背后的数据。我更喜欢startActivity(B.newIntent(this));
  • 向类添加静态方法不会增加 15 MB,您到底在测量什么?
  • @TimCastelijns:在每个活动中定义相同的方法“newIntent(Context context)”......这是一个好的代码标准吗?如果没有这个也可以通过在baseActivity中定义一个方法来实现。即使不使用静态也!!
  • 在每个活动中定义相同的代码并不是一个好的标准。重复的代码应该重构为例如 BaseActivity 类,是的。但是我们不应该在这里讨论代码风格偏好
猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2016-10-04
相关资源
最近更新 更多