1、有Activity A, B, C
现在 有A->B->C , 然后有C->B,此时,由于时间太久,B被系统回收了, 该如何把B还原出来呢? 为防止此种情况,该采取何种措施呢?
2、有Activity A, B; 有A->B时,是用有startActivityForResult启动的,在由B->A的过程中,A有米牛被系统回收的刻楞性, 如果有的话, 该如何预防呢?
谢谢各位!

解决方案 »

  1.   

    其实我觉得你可以这样,对于1来说,可能B确实资源用大发了,所以系统为了保证前端的程序运行正常就把B给干掉了,那么你可以在B里修改一下处理方式,比如说,B中可以将一些处理放在service里,这样通过调用service的setForeground来起到设置service的优先级,来使B的处理是正常的,这样B只管显示的内容,和控件的点击等操作,真正的数据只在service里实现。我觉得这样可能效果更好一些。
      

  2.   


    你说的这也是个不错的方法啊现在假设:  系统资源很有限, 此时用户在操作C的时候,去忙别的事情喽(用户的操作具有不可控性),可是嘞,当用户忙完回来,继续操作C,返回B的时候,B被干掉了。(以上只是假设啊 嘿嘿、)我们为防止此种情况的发生呢、需要做点儿什么呢、  以预防嘛  呵呵
      

  3.   

    第一个问题,当系统出于回收内存的考虑,关闭了一个activity之后。用户会期望当他再次回到那个activity的时候,它仍保持着上次离开时的样子。为了获取activity被杀死前的状态,你应该为activity实现onSaveInstanceState() 方法。Android会调用此方法在activity有可能被销毁之前(即onPause() 调用之前)。它会将一个以名称-值对方式记录了activity动态状态的Bundle 对象传递给该方法。当activity再次启动时,这个Bundle会传递给onRestoreInstanceState(),所以它们两个都可以恢复捕获的状态。
      

  4.   

    第2个问题,都有可能被系统回收,当你A需要的资源比较大,或者其他程序需要很大内存时。都可能被回收的。尽可能的使用小的资源,如果数据实在很大,修改下程序的架构,通过合适的设计模式。把mvc区分明确,这样可能有效的减少显示的时间,通过代理模式去刷新数据。
      

  5.   

    在B onDestroy()的时候,把相关状态保存到文件中去,在onStart()的时候把状态从文件中恢复过来。
      

  6.   

    关于第一个问题的核心是用户操作的不可控性,在这种情况下要有个通用解决的办法的可能性比较小,既然问题无法避免,我们考虑如何来恢复B的信息是否跟划算一些呢?你可以用配置文件、SharedPreference、Application等保存信息,以便需要时恢复。
    关于第二问题你写个小程序实现ActivityA和ActivityB之间相互循环调用,然后Debug一下,印象可能更深刻。
      

  7.   


    第一个问题的数据都是临时性的,程序退出后,那个activity就米牛保存到配置文件、SharedPreference了吧、  保存到bundle中 就可以了吧第一给问题解决咯的话, 第二个问题  就迎刃而解了吧