项目用到的开源库



SwipeBackLayout控件:https://github.com/ikew0ng/SwipeBackLayout/tree/master/library/src/main/java/me/imid/swipebacklayout/lib

其有关的解析:https://segmentfault.com/a/1190000002977515


ViewHolder的相关库:https://github.com/liaohuqiu/cube-sdk/tree/master/core/src/in/srain/cube/views/list


MultiItemRowListAdapter的来源:   https://github.com/umano/MultiItemRowListAdapter/tree/master/src/com/sothree/multiitemrowlistadapter


blur模糊算法代码:http://www.oschina.net/question/1377710_151988

       (模糊耗时大,所以使用jni) 涉及到jni调用知识:https://segmentfault.com/a/1190000004062899

ImageBlur 源项目地址:地址1 或者参考 地址二


progressBar开源库:http://www.open-open.com/lib/view/open1421247004625.html

android开源项目汇总:https://github.com/Trinea/android-open-project


瀑布流源码( PinterestLikeAdapterView):https://github.com/GDG-Korea/PinterestLikeAdapterView


谷歌Volley源码:https://github.com/soyoungboy/Volley

遗憾的是Volley没有实现处理json数据的请求,因此我们需要实现自己的Request,自定义Request需要继承Request,可以仿照源码中实现Request(接口)的方式,来模仿者来编写。具体可以参考:http://blog.csdn.net/guolin_blog/article/details/17482095


为了结合Gson+Volley+okHttp使用,可以参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0720/3209.html

关于使用OKHttp处理Volley底层Http请求,参考: http://www.jcodecraeer.com/plus/view.php?aid=3203


音频播放参考:http://www.itnose.net/detail/6090452.html


优酷视频播放的类PlayerActivity:使用singleTask模式(如果在栈中已经有Activity实例,那么就重用这个activity),也即,第一次打开这个activity时,是正常创建onCreate()->onStart() ->onResume(),但是当第二次重用这个activity时,就不再调用onCreate()了,而是,newIntent()->onRestart() ->onStart() ->onResume()

,

因此当传递intent参数时,需要在onCreate()里以及onNewIntent() 里面均要做处理。


Activity的四种启动模式:

    1. standard

        默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

    2. singleTop

        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

    3. singleTask

        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 

    4. singleInstance

        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。


Fragment嵌套Fragment时,有bug,需要用反射做一些调整。代码的反映在BaseLazyFragment 的onDetach()方法里。

activity A嵌套fragment B,B嵌套fragment C,C跳转到activity D,当activity D被finish掉之后,C中容易爆出getActivity为空.

   如果一个Fragment保存的视图状态为Null并且用户可见提示为true,那么'result' bundle(要保存的Bundle)会有一个微博初始化的值,然后导致空指针异常。

这个Exception是由什么原因造成的呢?如果想知道造成异常的原因,那就必须去看Fragment的相关代码,发现Fragment在detached之后都会被reset掉,但是它并没有对ChildFragmentManager做reset,所以会造成ChildFragmentManager的状态错误。

找到异常出现的原因后就可以很容易的去解决问题了,我们需要在Fragment被detached的时候去重置ChildFragmentManager,即:

@Override
  public void onDetach() {
    super.onDetach();
    try {
      Field childFragmentManager = Fragment.class
          .getDeclaredField("mChildFragmentManager");
      childFragmentManager.setAccessible(true);
      childFragmentManager.set(this, null);

    } catch (NoSuchFieldException e) {
      throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }

Case 2:当我们从一个Activity启动了一个Fragment,然后在这个Fragment中又去实例化了一些子Fragment,在子Fragment中去有返回的启动了另外一个Activity,即通过startActivityForResult方式去启动,这时候造成的现象会是,子Fragment接收不到OnActivityResult,如果在子Fragment中是以getActivity.startActivityForResult方式启动,那么只有Activity会接收到OnActivityResult,如果是以getParentFragment.startActivityForResult方式启动,那么只有父Fragment能接收(此时Activity也能接收),但无论如何子Fragment接收不到OnActivityResult。

这是一个非常奇怪的现象,按理说,应该是让子Fragment接收到OnActivityResult才对,究竟是什么造成的呢?这是由于某位写代码的员工抱怨没发奖金,稍稍偷懒了,少写了一部分代码,没有考虑到Fragment再去嵌套Fragment的情况。

但是如果我们需要在OnActivityResult的时候处理一些事情的话,我们可以通过在子Fragment中以getParentFragment.startActivityForResult的方式来启动,然后在父Fragment中去接收数据,我们需要在子Fragment中提供一个方法,如:getResultData(Object obj),通过父Fragment中的子Fragment实例去调用这个方法,把相应的数据传过去,然后去更新子Fragment。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值