一.listview的优化:

首先要知道getview实际就是个for循环。

我们重写的getview方法中本身有一个convertview,因为只需要保留能够显示的最大个数的view即可,所以:

第一步就是判断convertview是否为空,是空就inflater一个view,并且将findviewid的结果赋给holder

然后convertView.setTag(holder)(将holder与convertview绑定);

不是空的时候就直接取出holder(holder = (Holder) convertView.getTag();)(新的convertview通过复用的方式使用消失的convertview);

ps: holder的作用就是保存findviewbyid的结果。

再优化的话就是分页加载和分批加载一起用。

当listview嵌套gridview时,优化adapter时,要把gridview的adapter也加到listholder中;

eg:

 if (null == listHolder.gridAdapter) {
listHolder.gridAdapter = new MyGridAdapter(listData.get(position).getImgs());
listHolder.gridView.setAdapter(listHolder.gridAdapter);
} else {
listHolder.gridAdapter.update(listData.get(position).getImgs());
}
 update是自己写的方法
 public void update(List<String> gridData) {
this.gridData = gridData;
notifyDataSetChanged();
} 二。加载图片带来的oom
picasso 
1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。 
2.使用复杂的图片压缩转换来尽可能的减少内存消耗 
3.自内存和硬盘二级缓存功能
4.Adapter的重用会被自动检测到,Picasso会取消上次的加载
5.虽然recycle()从源码上看,调用它能立即释放Bitmap,但它并没立即释放内存。所以我们还需手动设置为NULL。
三static带来的oom
 第一,应该尽量避免static成员变量引用资源耗费过多的实例,比如Context。
第二、Context尽量使用Application Context,因为Application的Context的生命周期比较长,引用它不会出现内存泄露的问题。
第三、使用WeakReference代替强引用。比如可以使用WeakReference<Context> mContextRef;
四 context带来的oom,一部分同上;
不建议将AsyncTask作为内部类使用
 第一、将线程的内部类,改为静态内部类。。
 第二、在线程内部采用弱引用保存Context引用。
五AsyncTask

不建议将AsyncTask作为内部类使用(double speaking)
AsyncTask<Params, Progress, Result>
Params 参数,progress(integer) 进程,result 结果;

1、onPreExecute():UI线程里面调用,最先调用。我们在这个方法里面通常显示一个等待框。

2、doInBackground(Params...):运行在后台线程,在这个方法里面,去做耗时的事情,比如下载访问网络,操作文件等。在这个方法里调用publishProgress(Progress...)来调用当前任务的进度,对应的onProgressUpdate(Progress...)方法会被调用,onProgressUpdate是运行在UI线程的。

3、onProgressUpdate(Progress...):运行在UI线程,在调用publishProgress()方法之后。这个方法用来在UI上显示任何形式的进度。

4、onPostExecute(Result):当task结束后调用,它运行在UI线程。

5、取消一个task,我们可以在任何时候调用cancel(Boolean)来取消一个任务,当调用了cancel()方法后,onCancelled(Object)方法就会被调用,onPostExecute(Object)       方法不会被调用,在doInBackground(Object[])方法中,我们可以用isCancelled()方法来检查任务是否取消。

局限性:

1.AsyncTask实例必须在UI线程中创建(创建Handler对象时需要当前线程的Looper,所以为了以后能够通过mHandler将执行环境从后台线程切换到主线程(即在主线程中执      行handleMessage方法),我们必须使用主线程的Looper,因此必须在主线程中创建mHandler。这也就解释了为什么必须在主线程中加载AsyncTask类,

是为了完成mHandler    这个静态成员的初始化工作。(onPostExecute方法就是利用的handler))

2.execute(Params...)方法必须在UI线程中调用(只能调用一次execute方法)

AsyncTask默认使用串行方式,m.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)实现并行方式;

3.一个任务只能被执行一次。


												

android面试宝典的更多相关文章

  1. Android面试宝典(转)

    Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历. 1. ...

  2. 【Android】面试宝典

    Android面试 1. 内容介绍................................................................................... ...

  3. 月薪20k+的Android面试都问些什么?(含答案)

    金九银十跳槽季接近尾声了,可是今年由于疫情的影响仍然不太好找工作,相信大家肯定急需一套Android面试宝典,下面就分享给大家我珍藏已久的Android高阶面试宝典,供大家学习 ! 1.自定义Hand ...

  4. Android高薪之路-Android程序员面试宝典

    Android高薪之路-Android程序员面试宝典

  5. .NET工程师面试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...

  6. 深圳--博雅互动 Android面试打酱油归来

    公司在TCL工业园E4,坐地到西丽站,那边在修路,不好走.B796公交站台在A出口的反方向,还要顺着施工的屏障打个弯,在西丽法院1上车.公司那边比较偏了,附近只有两趟公交.办公地点在10楼,出电梯就可 ...

  7. Android面试收集录6 事件分发机制

    转自:秋招面试宝典. 一. 基础认知 1.1 事件分发的对象是谁? 答:事件 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件). Touch事件相关细节(发 ...

  8. JAVA面试宝典分享

    JAVA面试宝典分享 前言 面试题 Java面试题(上) Java面试题(中) Java面试题(下) 参考答案 其他补充内容: 项目经验 项目介绍 项目开发流程 项目管理 系统架构 第三方工具(插件) ...

  9. 字节跳动Android面试凉凉,挥泪整理面筋,你不看看吗?

    想在金九银十找工作的现在可以开始准备了,这边给大家分享一下面试会遇到的问题. 找工作还是需要大家不要担心,由于我们干这一行的接触人本来就不多,难免看到面试官会紧张,主要是因为怕面试官问的答不上来,答不 ...

随机推荐

  1. mybatis-generator 1.3.5支持流式 fluent 方法

    在以往的无数此写model的过程中,大家都会烦恼model的set方法写一堆.比如 Person p = new Person(); p.setName("name"); p.se ...

  2. jquery tree

      <div class="fl left"  id="nav" style="width:18%" >             ...

  3. 矢量图绘制工具Svg-edit调整画布的大小

    矢量图绘制工具Svg-edit调整画布的大小 ------------------------------ ------------------------

  4. 使用Gitblit 在windows 上部署你的Git Server

    Gitblit: 在windows 上部署你的Git Server 前言 之前在dudu的文章里看到过用bonobogit 部署在 IIS 7.5 上的Window 平台的git 服务器.学着部署使用 ...

  5. 百度编辑器ueditor插入表格没有边框颜色的解决方法

    附:从word excel 中 复制的表格提交后无边框,参考这个同学的,写的很详细:   http://blog.csdn.net/lovelyelfpop/article/details/51678 ...

  6. 关于LESS

    LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单. 翻译成大白话:写CSS算是体力活,并没有编程的感觉,不给前端人员装逼的机会,于是就搞了这玩意,相当于编程写C ...

  7. 5天揭秘js高级技术-第二天

    一.数组 1. 什么是数组? 数组就是一组数据的集合: 其表现形式就是内存中的一段连续的内存地址: 数组名称其实就是连续内存地址的首地址: 2. 关于js中的数组定义 数组定义无需指定数据类型: 数组 ...

  8. 【学习笔记】C语言之词法规则

    一.字符 标准并没有规定C环境必须使用特定的字符集,但是它规定了字符集必须包含英语所有的大小写字母,数字0到9,以及下面的字符: ! # % ^ & * ( ) _ – + =  / . ? ...

  9. Collection小结

    Collection:

  10. angularJs 控制文本长度,超出省略号过滤器

    1.控制文本长度,超出省略号 在模版中: <label>{{item.abbr| cut:true:20:' ...' }}<label> js: angular.module ...