具有上下文/活动的静态实用程序类 - Android

Rob*_*uba 6 android utilities android-activity

在Android应用程序的开发中,我已经找到了一组实用程序类型的方法,我将它放入静态类中.所有这些方法都用于多个活动,并且大多数活动不需要来自调用活动的任何信息.

但是,我现在有一些方法需要Activity的Context和一个需要Activity本身的方法.让我举例说明其中一些:

  • getDeviceNaturalOrientation() - 使用Activity的getWindow().getWindowManager().getDefaultDisplay()来访问显示旋转,宽度和高度,以确定设备的自然方向.
  • getDeviceOrientation() - 与上面类似,但要获取当前方向
  • createFile() - 使用Context来访问某些资源(字符串)并创建和显示一些Toasts

现在,关于这个Utils类的重要问题是:

  1. 到目前为止,每个函数都接受一个Context参数,我从我所使用的Activity中传递,但是可以在Utils类中创建一个静态Context或Activity变量并在每个Activity的开头设置它(就像在onCreate中一样) )?此变量将用于需要Context或Activity实例的任何函数.
  2. 假设不建议使用上述内容,是否可以将Activity参数传递给方法,或者是否有理由仅将Activity作为Context传递?我上面用于设备方向函数的方法特定于Activity对象,而不是Context,因此要么作为Activity传递,要么作为Context传递并转换为Activity(后者听起来像一个可怕的想法).

此外,我非常乐观地认为这个Util类可能不适合需要Context/Activity的这些方法,所以我欢迎那些仍然会阻止在每个使用它们的活动类中复制这些方法的替代方法.

Gab*_*han 4

1)到上下文的静态链接可能会导致内存泄漏。这意味着即使在销毁后,对 Activity 的引用也将保留在静态变量中,因此该 Activity 的所有内存及其所有视图将保持有效,不会被 gc 清理。您可以执行此操作,但必须小心完成后将变量清空。最好还是避免它。

2)将活动作为活动传递有点尴尬,但没有技术原因不这样做。那时我们正在争论代码的清洁度/可维护性。有时,非清洁解决方案更容易。当然,在上面的情况下,我宁愿将方向/显示/资源对象传递给函数,而不是传递整个上下文或创建特殊的访问器。