应用被后台进程杀死后数据恢复问题

Devin_1988 2014-03-12 11:00:00
我不知道各位大神都有没有这种情况,应用长时间处在后台被android给kill,所有的应用运行数据都被清空,如一些登入保存在application中的user信息,和其他全局信息。这样下次再进入应用的时候application-onCreate()-->当前Activity-onCreate(),显然,如user这块的内容就为null,当代码跑到用到它的地方时就报null pointer。
想到的方法是在继承的BaseActivity中onSaveInstance(Bundle outState)保存user等关键全局变量,在onRestoreInstance()中进行恢复。但这之中我又碰到一个问题,我有在全局保存一个ArrayList<Activity>的栈信息,我应用恢复也必须要恢复栈list的信息,我试了好多方法都没办法保存ArrayList<Activity>到Bundle中。Parcelable是需要对象内的所有字段都是实现parcelable的吧,Activity字段这么不固定我好像没什么办法用它实现parcelable吧。有没大神有好的实现的。

另外,关于应用被杀死报NULL POINTER 有没有其他解决办法,一直为这种问题困扰!坐等各位大神赐教!
...全文
717 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iltgcl 2014-03-12
  • 打赏
  • 举报
回复
“我有在全局保存一个ArrayList<Activity>的栈信息,我应用恢复也必须要恢复栈list” 這個做法是錯誤的,Activity由系統控制,你只需要保存你要的數據而不是activity,在啓動的時候讀出數據就行了,
哎,真难 2014-03-12
  • 打赏
  • 举报
回复
shareperence保存在本地,,,,
Devin_1988 2014-03-12
  • 打赏
  • 举报
回复
引用 3 楼 dxjwolf 的回复:
[quote=引用 2 楼 Devin_1988 的回复:] [quote=引用 1 楼 iltgcl 的回复:] “我有在全局保存一个ArrayList<Activity>的栈信息,我应用恢复也必须要恢复栈list” 這個做法是錯誤的,Activity由系統控制,你只需要保存你要的數據而不是activity,在啓動的時候讀出數據就行了,
我保存Activity栈的目的是在退出的时候需要让所有的存在的Activity调用一次finish(),不然应用关不干净。如果我在进程被杀死的时候没有恢复之前的保存在list中的Activity栈话,那在android中原来打开的栈还在,我们保存的栈信息都丢失了,这时退出调用finshAll(),就不会清除所有存在的栈,应用退不干净。 我又不想用广播的方式让Activity退出,因为后面我们可能涉及第三方应用接入的东西,需要保证Activity顺序退出[/quote] 你直接在destory里面做吧 不过如果是后台走的low memory kill 和系统GC 估计你是怎么都找不回来了 建议在每次启动的时候去检测 或者在数据update的时候写到文件里面或者用系统的sharepreference [/quote] onDestroy()肯定是不行的,onSaveInstance()就是为意外进程中止设计的。 数据写在文件系统也不合理,这些用户信息的敏感数据是不可能保存起来的。
妖怪 2014-03-12
  • 打赏
  • 举报
回复
引用 2 楼 Devin_1988 的回复:
[quote=引用 1 楼 iltgcl 的回复:] “我有在全局保存一个ArrayList<Activity>的栈信息,我应用恢复也必须要恢复栈list” 這個做法是錯誤的,Activity由系統控制,你只需要保存你要的數據而不是activity,在啓動的時候讀出數據就行了,
我保存Activity栈的目的是在退出的时候需要让所有的存在的Activity调用一次finish(),不然应用关不干净。如果我在进程被杀死的时候没有恢复之前的保存在list中的Activity栈话,那在android中原来打开的栈还在,我们保存的栈信息都丢失了,这时退出调用finshAll(),就不会清除所有存在的栈,应用退不干净。 我又不想用广播的方式让Activity退出,因为后面我们可能涉及第三方应用接入的东西,需要保证Activity顺序退出[/quote] 你直接在destory里面做吧 不过如果是后台走的low memory kill 和系统GC 估计你是怎么都找不回来了 建议在每次启动的时候去检测 或者在数据update的时候写到文件里面或者用系统的sharepreference
Devin_1988 2014-03-12
  • 打赏
  • 举报
回复
引用 1 楼 iltgcl 的回复:
“我有在全局保存一个ArrayList<Activity>的栈信息,我应用恢复也必须要恢复栈list” 這個做法是錯誤的,Activity由系統控制,你只需要保存你要的數據而不是activity,在啓動的時候讀出數據就行了,
我保存Activity栈的目的是在退出的时候需要让所有的存在的Activity调用一次finish(),不然应用关不干净。如果我在进程被杀死的时候没有恢复之前的保存在list中的Activity栈话,那在android中原来打开的栈还在,我们保存的栈信息都丢失了,这时退出调用finshAll(),就不会清除所有存在的栈,应用退不干净。 我又不想用广播的方式让Activity退出,因为后面我们可能涉及第三方应用接入的东西,需要保证Activity顺序退出

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧