一.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. java 的public private protected作用域

  2. Java加载资源文件几种方法

    from: http://andyzhu.blog.51cto.com/4386758/775836/ import java.net.URL; import org.springframework. ...

  3. Chrome 开发工具之Elements

    友情提示:全文图片高能,如使用手机阅读,请确保在wifi情况下或者流量充足.图片有点渣,也算辛苦做出来的,请别嫌弃- Elements面板主要展示当前页面的组织结构,在如今的应用程序中,HTML页面初 ...

  4. js中网页区域/正文/屏幕 宽和高

    网页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; 网页可见区域宽: document.body.offs ...

  5. HDU 4081Qin Shi Huang's National Road System(次小生成树)

    题目大意: 有n个城市,秦始皇要修用n-1条路把它们连起来,要求从任一点出发,都可以到达其它的任意点.秦始皇希望这所有n-1条路长度之和最短.然后徐福突然有冒出来,说是他有魔法,可以不用人力.财力就变 ...

  6. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  7. [Unreal]学习笔记之灯光说明

    利用灯光通道,实现局部照亮效果 没有更改Channel之前的效果: 需要将网格物体设置为可移动 将灯光和被照亮物体的Channel设置为同样并且非0零: 设置成功后,就可以实现局部照亮

  8. EasyPusher应用

    转自https://github.com/EasyDarwin/EasyPusher 本文仅实际体验一下demo,分析一下如何应用. 1)EasyPusher框图预览 2) EasyPusher应用实 ...

  9. hdu2211杀人游戏

    Problem Description 不知道你是否玩过杀人游戏,这里的杀人游戏可没有法官,警察之类的人,只有土匪,现在已知有N个土匪站在一排,每个土匪都有一个编号,从1到N,每次杀人时给定一个K值, ...

  10. 在Azure虚拟机上安装SQL server

    Azure虽然向用户提供SQL paas服务,但是大多数用户还是习惯在用虚拟机自己搭建SQL server,这样的好处是便于后期最大化的扩展,所以鉴于这些情况,所以觉得有必要写这篇博客. 首先,我们要 ...