gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:47 27 4
gpt4 key购买 nike

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

但是,我现在有一些方法需要 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 的方法的方法持开放态度,所以我欢迎仍然可以防止在每个 Activity 类中复制这些方法的替代方案使用它们。

最佳答案

1)上下文的静态链接很可能导致内存泄漏。这意味着即使在 Activity 被销毁后,对 Activity 的引用仍将保留在静态变量中,因此 Activity 的所有内存及其所有 View 将保持有效并且不会被 gc 清除。你可以这样做,但你必须小心在完成时将变量清空。最好避免它。

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

关于android - 具有上下文/Activity 的静态实用程序类 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com