当前位置: 代码迷 >> Android >> []关于共享数据设计上以及android机制上的有关问题
  详细解决方案

[]关于共享数据设计上以及android机制上的有关问题

热度:67   发布时间:2016-04-28 02:53:50.0
[求助]关于共享数据设计上以及android机制上的问题
自己踏在android的路上算是刚刚起步,早前随着开发了一个项目,摸摸索索的有了自己的一些设计上的规范。

在昨天偶尔看到一个关于Application共享数据的帖子,经过测试才发现把数据存储到Application,当应用置换到后台一段时间后,Application确实会被释放,从而导致数据丢失,界面显示不出内容。这才发现之前所谓的“规范”其实就是坏习惯。

我涉及的应用普遍是依赖服务器的客户端应用,我习惯性的把从服务器上获取的数据存储在Application(因为其他地方可以通过这点复用数据而不需要重新请求),如上所述,知道会出现的问题后我开始反思设计,但是反思的主题不是“不应该在Application中存储数据”而是"数据存储在内容中不靠谱"。

一个实验:
定义:MyApplication、ActivityA、ActivityB、StaticTest
在ActivityA中,设置MyApplication.data,设置StaticTest.data(static field),通过Intent.putExtra("data", ..)传递数据跳转到ActivityB。

进入ActivityB后,按HOME,模拟应用闲置,然后切换回ActivityB,ActivityB会重新执行onCreate(),接着访问数据:
MyApplication.data和StaticTest.data会被释放,而Intent的内容会被保留。

1. Application和静态变量都可能被释放,例如使用HttpClient登录后client会自己维持session和cookie(服务器的校验凭证)。
例如:
login(String username, String password)之后,获取个人信息getInfo(),服务器根据session或者cookie判断你的身份。
那么不管是把该client放在application中获取还是静态类中获取都无法保证全局唯一,当资源被释放之后,实例里面维持的session和cookie自然丢失,那接下来的所有请求校验都会不通过了?这种问题怎么解决?

2. 从实验中,Intent的数据保存到哪里?为何不会丢失掉?

3. 即使通过Intent传递数据,但是数据量有大小限制,是否更有可靠的手段?



------解决思路----------------------
1. 可以使用OAuth协议,通过token来实现登录验证。
2. 
3. 如果参数是大对象,存到文件里面,把文件名作为参数。
------解决思路----------------------
可以存在数据库中,并在内存中保持一份,当内存中的被释放时,从内存中读取;
也可以通过 SharePreference 来保存键值对
  相关解决方案