分类菜单
android开发
培训首页> android开发培训头条> Android开发中常见的坑要如何解决

Android开发中常见的坑要如何解决

android开发
发表时间:2017-09-28 3765人浏览

  一、viewpager+fragment动态增删缓存问题

  产生原因:

  我们在开发中会常常用到viewpager+fragment,有时候可能会有这样的需求,需要对viewpager中的内容进行动态的增删管理,但是我们都知道viewpager为了保 证滑动的流畅性,viewpager在加载当前页的时候已经将pager页左右页的内容加载进内存里了,所以此时我们不进行任何处理的话,是我发达到我们预期的效果的。

  解决方案:

  1.将fragmentpageradapter 替换成fragmentstatepageradapter,

  因为前者只要加载过,fragment中的视图就一直在内存中,在这个过

  程中无论你怎么刷新,都是无用的,直至程序退出;

  后者可以满足我们的需求。

  2.我们可以重写adapter的方法–getitemposition(),让其返回pageradapter.position_none即可。

  以下为引用内容:

  @override

  public int getitemposition(object object) {

  // todo auto-generated method stub

  return pageradapter.position_none;

  }

  到这一步我们就可以真正的实现随意、彻底删除viewpager中的fragment,随意增删。

  二、善用dialog

  一些交互简单、或者只是展示功能的页面,如果使用一个activity来显示的话,过于繁琐,开销也很大,使用fragment的话,蛋疼的生命周期也不好处理,此时使用一个全屏的dialog来模拟一个activity就是一个不错的选择,详情请参照我博客中的一篇帖子dialog的高冷用法。

  三、splash页面那点事

  几乎每个页面都会有一个spalsh页,通常我们会用一个activity加载一张全屏的背景图,或者放一个app的logo,展示2秒之后,跳转到登录或者主页面,期间可能会做一些数据初始化,检查更新等操作。相信大多数小伙伴也是这么干的,但是,你不觉得一个activity只显示2秒就杀掉有点浪费?个人觉得这样的开销是非常之不划算的,我们可以借用上面一条,利用一个dialog模拟一个splash页面,2秒之后dismiss掉这个dialog,而检查更新,初始化数据等操作就放到mainactivity中。或者使用fragment替 代splashactivity等等方法, 都可以达到splash页的相同效果。

  四、善待内部类

在开发中,我们会经常用到内部类,内部类的出现,解决了java只能单继承的局限性,使得开发能更加灵活。但如果内部类用的不好,就会出现android developer的噩梦,oom!。为什么呢?底子稍微好点的同学,应该都知道内部类可以访问外部类的成员变量和方法,因为内部类持有了外部类的引用,当你在一个activity中使用的内部类,当activity销毁时,你的内部类没有释放,就会造成这个activity无法被gc回收,因为内部类中持有了activity的应用。如果你对内部类不太了解,或者不熟悉的换,可以先看下我的这篇博文深入理解java内部类

  五、library那些事

  library中的switch中不能使用id来case,这个在我的上一篇博文中已经讲过。这里我们再讲一个library的坑,当我们引入一个依赖库时,依赖库中一般都会自带一个support v4的包,这个v4包的版本,和我们创建工程时的版本一般情况下是一致的,但是一旦我们自己工程的v4包的依赖库中的v4包中的版本不一致时,一大推莫名其妙的错误日志就会接踵而来。此时的处理方法也很简单,由于v4包都是向下兼容的,只需要保持依赖库的版本和我们自身项目的版本一致即可。


  • Adobe认证
  • Oracle认证
  • 思科认证
  • 微软认证
  • Linux认证
  • 其他
  • 职业技能提升
  • 考证找工作
  • 兴趣爱好
  • 周末班
  • 全日制白班
  • 随到随学

温馨提示

个性定制课程


温馨提示