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面试凉凉,挥泪整理面筋,你不看看吗?
想在金九银十找工作的现在可以开始准备了,这边给大家分享一下面试会遇到的问题. 找工作还是需要大家不要担心,由于我们干这一行的接触人本来就不多,难免看到面试官会紧张,主要是因为怕面试官问的答不上来,答不 ...
随机推荐
- IOS-Hybrid(混合开发)
http://www.cnblogs.com/oc-bowen/p/5423902.html 1.1. APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等 ...
- php实现数据粘性例子
php实现数据粘性例子 在填表单的时候,有时候会出现表单未填完就提交的情况,这时候若是想要回到原来的表单页面,一般之前填的内容都会消失掉. 故使用PHP实现回到原来表单但是填写数据不消失,代码
- 引用js或css后加?v= 版本号的用法
<span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version ...
- Web安全之SQL注入攻击技巧与防范
http://www.plhwin.com/2014/06/13/web-security-sql/
- Eclipse中.calsspath文件解析
来自帅气的Sublime Text
- iOS 动态化
来自bang's blog http://blog.cnbang.net/tech/3286/ 问题 在开发模式上,web 的方式是比较先进的,有各种优点,包括跨平台/UI开发效率高,最重要的是可以时 ...
- ASP.MVC 基于AuthorizeAttribute权限设计案例
ASP.MVC上实现权限控制的方法很多,比如使用AuthorizeAttribute这个特性 1.创建自定义特性用于权限验证 public class AuthorizeDiy : Authorize ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- [从产品角度学excel 04]-单元格的“衣服”
忘记发这里了..补发一下 这是<从产品角度学EXCEL>系列——单元格篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 2 EXCEL里的树形结构 3 单元格 ...
- ObjC运行时部分概念解析(一)
转型iOS已经许久了,Runtime(运行时)还没有好好了解过.之前没有阅读过源码,紧紧凭借自己的臆测.现在阅读下源码,做一些笔记.方便再次翻阅 SEL SEL是一个关键字,如果没有涉及runtime ...