【问题标题】:Android Application Level Scope VariablesAndroid 应用程序级别范围变量
【发布时间】:2014-02-05 12:31:09
【问题描述】:

我了解没有可用于定义共享逻辑/数据的应用程序级别范围,并且每个活动本质上都是由清单捆绑在一起的独立应用程序...

但是我有一组通过网络服务调用获得的用户访问权限,并且不想在每个活动onCreate() 中进行此调用。

我在应用程序中使用SharedPreferences,但由于权限不适合用户编辑,因此在 android 设备上公开平面文件感觉是一种不安全的处理方式。

如果应用程序重新启动,我确实需要重新请求此信息,所以我认为最便宜的是将其存储在变量中。

我知道 IntentExtras,但我们谈论的是设置“对象”,而不是原始类型。

处理这种情况的正确方法?

【问题讨论】:

  • 创建一个单例,第一次加载这些变量,然后使用静态 getter

标签: android architecture


【解决方案1】:

您实际上可以创建一个“应用程序”类,该类可用于从本质上创建应用程序范围的设置。

只需创建一个新类并扩展 Application,然后设置任何类成员和适当的 getter/setter 方法,您就可以在整个应用程序中访问它们。

然后您需要按如下方式更新您的清单:

<application android:icon="@drawable/logo"
             android:label="@string/app_name"
             android:name=".application.CustomApplication">

然后在任何活动中您都可以按如下方式访问它:

CustomApplication app = ((CustomApplication)getApplication());

【讨论】:

  • 这些信息需要是静态的吗?还是getApplication() 会返回一个已经实例化的对象,它会在整个生命周期中持续存在?
  • 不,不需要是静态的,getApplication获取实例化的Application对象(应用运行时始终实例化Application类)
  • 太棒了,这应该可以完美运行,我测试后会接受。
【解决方案2】:

我认为使用共享首选项是相当安全的。只有具有 root、自定义 rom 和黑客知识的高级用户才能抓住机会! (我什至不确定这是否可能)。

除了 SharedPreferences,您还可以实现自定义应用程序对象并将您的权限保留在那里。

无论如何,作为一名开发人员,我认为它更有可能在我为获得用户权限(使用 https 等)和我的应用程序被反编译的请求中的某个地方被黑客入侵。

【讨论】:

  • 不担心被反编译,共享首选项进入未加密的平面文件。不担心有人“获取”信息,只担心执行期间的编辑(调整权限等)
  • 不,我宁愿在设计时考虑到最高的公分母,现在你应该假设你的用户是 root 并且可以访问 adb。
  • 然后,将数据存储在内存中(使用自定义应用程序对象)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
相关资源
最近更新 更多