android面试宝典
一.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面试宝典的更多相关文章
- Android面试宝典(转)
Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语. C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历. 1. ...
- 【Android】面试宝典
Android面试 1. 内容介绍................................................................................... ...
- 月薪20k+的Android面试都问些什么?(含答案)
金九银十跳槽季接近尾声了,可是今年由于疫情的影响仍然不太好找工作,相信大家肯定急需一套Android面试宝典,下面就分享给大家我珍藏已久的Android高阶面试宝典,供大家学习 ! 1.自定义Hand ...
- Android高薪之路-Android程序员面试宝典
Android高薪之路-Android程序员面试宝典
- .NET工程师面试宝典
.Net工程师面试笔试宝典 传智播客.Net培训班内部资料 这套面试笔试宝典是传智播客在多年的教学和学生就业指导过程中积累下来的宝贵资料,大部分来自于学员从面试现场带过来的真实笔试面试题,覆盖了主流的 ...
- 深圳--博雅互动 Android面试打酱油归来
公司在TCL工业园E4,坐地到西丽站,那边在修路,不好走.B796公交站台在A出口的反方向,还要顺着施工的屏障打个弯,在西丽法院1上车.公司那边比较偏了,附近只有两趟公交.办公地点在10楼,出电梯就可 ...
- Android面试收集录6 事件分发机制
转自:秋招面试宝典. 一. 基础认知 1.1 事件分发的对象是谁? 答:事件 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件). Touch事件相关细节(发 ...
- JAVA面试宝典分享
JAVA面试宝典分享 前言 面试题 Java面试题(上) Java面试题(中) Java面试题(下) 参考答案 其他补充内容: 项目经验 项目介绍 项目开发流程 项目管理 系统架构 第三方工具(插件) ...
- 字节跳动Android面试凉凉,挥泪整理面筋,你不看看吗?
想在金九银十找工作的现在可以开始准备了,这边给大家分享一下面试会遇到的问题. 找工作还是需要大家不要担心,由于我们干这一行的接触人本来就不多,难免看到面试官会紧张,主要是因为怕面试官问的答不上来,答不 ...
随机推荐
- 洗牌算法Fisher_Yates原理
1.算法 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle 简单的原理如下图所示: 2.原理 总结下,洗牌算法Fisher_Yates ...
- PHP 自动加载规范PSR-4
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- Anaconda 安装 ml_metrics package
ml_metrics is the Python implementation of Metrics implementations a library of various supervised m ...
- T-SQL 关闭数据库所有连接
原文引用自: http://www.cnblogs.com/kissazi2/p/3462202.html 下面给出一种删除数据库活动连接的方式.将下面代码段中的"--修改一下"处 ...
- SpringMVC学习记录1
起因 以前大三暑假实习的时候看到公司用SpringMVC而不是Struts2,老司机告诉我SpringMVC各种方便,各种解耦. 然后我自己试了试..好像是蛮方便的.... 基本上在Spring的基础 ...
- 安装出现了error launching installer
安装geany时,出现问题: 两种解决方法: 解决的办法是: 在控制面板中寻找"区域.语言设置"--管理--更改系统区域设置--中文(简体.中国),确定退出即可! 但是....我不 ...
- iOS优秀博客收录
原文链接:http://ju.outofmemory.cn/entry/105297 唐巧 王巍 破船之家 NSHipster Limboy 无网不剩 念茜的博客 Xcode Dev Ted's Ho ...
- 学习实战java虚拟机的计划图
啥也不说了,实战java虚拟机,好好学习,天天向上! <实战java虚拟机>一书Q交流群:397196583
- 决策树-ID3
id3:无法直接处理数值型数据,可以通过量化方法将数值型数据处理成标称型数据,但涉及太多特征划分,不建议 决策树:的最大优点在于可以给出数据的内在含义,数据形式非常容易理解: 决策树介绍:决策树分类器 ...
- UVA - 11235 Frequent values
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...