2016-04-30 40 views
1

我使用静态变量在一个类中的Android:上课的时候被卸载或当虚拟机停止保持静态变量为一个较长的时间段 - Android电子

class Test{ 
    static int x; 
} 

这个变量被删除。

我需要保持这个变量的时间较长,但我不能使用SharedPreferences或任何永久存储,因为这个静态字段中的信息是敏感的,不应该存储在任何可访问的存储中。

有什么建议吗?

编辑:

由于Android服务在后台运行,并且不太受操作系统停止,我决定成立一个服务类中的静态字段,但奇怪的是这并没有解决这个问题,它看起来操作系统将卸载服务类,即使服务本身仍在后台运行,或者至少它似乎在某个事件被调用时再次加载服务类,我不知道到底发生了什么,但静态字段变为NULL后一段时间,我在一个计时器中设置通知来检查。任何人都可以证实此事

+0

使用数据库?你也可以加密它。 –

+2

“可访问存储”是什么意思?唯一可以访问'SharedPreferences'的人是那些为他们的设备建立根的人。这不像你的领域在某种程度上魔法般地抵御所有来者。毕竟,用适当的工具,人们也可以得到这一点。你担心的攻击者的个人资料可能会访问这个“敏感”的价值? – CommonsWare

+0

我知道SharedPreferences需要读取根访问权限,但攻击者访问RAM更加困难,所以如果我可以创建RAM磁盘或类似的东西,它将解决我的问题 – ammcom

回答

1

您可以创建一个启动的服务,在活动被销毁后挂起。服务可以在不再需要时被销毁。你仍然需要遵循良好的实践,私有变量公共getter和setter,并在清单等小心。在这种情况下的静态意味着你只有一个变量值的副本,无论测试类类型的对象数量。

+0

这是一个很好的解决方案,我试图按照它,但是您能否确认服务对象是永远不会销毁?,我做了一个小测试,并且不保证服务的Java对象将被保存在内存中,唯一确认服务本身作为应用程序组件不会被Android系统停止和维护的 – ammcom