viewpageindicator +fragment 在网络访问中与volley框架 null问题

最近在写一个电子图书馆,采用的主体的框架是volley和viewpageindocator。首先想说,这两个开源框架真的很优秀。有很多帖子bolg都对他们做了很详细的描述,在此我仅仅将我做码代码过程中遇到的问题记录一下。

1.viewpage后台运行之后在activity栈还原,程序突然变得很卡。并不时报出getActivity()为null的错误。

对于这个问题,我想说的是,首先需要理解fragment的生命周期,我在这里不多说,很多帖子都有这个描述。遇到这个问题主要是因为在后台运行过程中GC回收了activity,而fragment并没有回收,而是通过onsaveinstance函数保存了临时状态,那么在恢复activity的时候,就会导致fragment和fragmentactivity之间的attach不到的问题。在此,解决办法,很多前辈都有描述,两种。

    1、不保存fragment的状态:在MyActivity中重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到fragment随MyActivity一起销毁的目的。
    2、重建时清除已经保存的fragment的状态:在恢复Fragment之前把Bundle里面的fragment状态数据给清除。方法如下:
        if(savedInstanceState!= null)
        {
            String FRAGMENTS_TAG = "android:support:fragments";
            savedInstanceState.remove(FRAGMENTS_TAG);
        }

2.volley网络访问获取到json数据,加载到adapter中也报getActivity为null错误。

一直以为是因为oom的问题,导致内存回收了,而导致fragmentActivity一直出现这个状态。就一直在清理缓存并对fragment各个生命周期进行观察。后面才发现并不是这个问题,真正的问题是:volley网络获取数据是异步操作,那么操作完成获取到网络返回值的时候,可能用户已经滑到别的fragment,而该fragment已经没有attatch到fragmentActivity上去了。那么这是的getActivity返回值也就理所当然的是为null了。毕竟是异步操作。

对于这种问题,参考过搜狐视频的APP,因为感觉浏览界面是差不多的。发现有一个不一样的地方,搜狐的app在切换的时候,滑动时两个相邻fragment的view是完全保证并正常运行的。这个问题等以后有时间深入探讨一下。

而我对于这个问题的解决方式很简单:通过启动程序的时候启动一个后台service,通过这个service来进行初始界面的数据获取,然后保存在缓存中,或者直接sharepreference保存到本地。当数据拉取完成之后通过广播的形势,通知到UI主线呈。如果进入viewpageindicator 之时数据还没有缓存完成,那么就显示圆形进度条进行等待操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值