Java中的String类可以被继承么?
答:不能,因为它是一个final类,同样的还有Integer,Float,Boolean,Byte,Character,Long,Short等等,也就是说,所有基本类型的包装类都是final类,无法被继承或修改
如何安全的退出一个已经开启多个activity的APP
答:在Application中持有一个全局的集合(List),进而在其onCreate()方法添加到这个集合,最终遍历所有的activcity并finish。
ActivityCompat.finishAffinity(this);
简单的概叙下Handler?
答:andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
- Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
文件的上传?
答:使用HttpURLConnection得到输入流,将文件的通过IO流的方式上传到服务器。可使用第三方Xutils框架。
ListView的源码和如何优化Listview?
答:根据ConvertView来判断View的重用还是新建,新建的话通过ViewHolder来存储所有的控件并设置到View的Tag中有利于下次的复用。
AIDL原理?
答:AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言。
实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信,我们可以通过AIDL来制定一些规则,规定它们能进行哪些交流。
通过接口的方式创建AIDL文件的后缀是 .aidl,而不是 .java。
创建一个类实现刚才那个aidl的接口,通过预先定义的接口达到两个进程内部通信进程的目的,在Service中Aidl返回一个Binder对象。
Binder机制
Binder是Android的系统进程通许方式之一简称IPC
Binder使用Clinet->Server通讯方式,Binder框架定义的四个角色,Server,Client,ServiceManager,以及Binder驱动,其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间,Binder驱动程序提供Dev/binder与用户空间交互,Server,Client,ServiceManager,通过open和ioctl文件操作函数和Binder交互。
深入理解Binder机制
TCP和UDP的区别,tcp如何保证可靠的,丢包如何处理?
TCP面向连接,三次握手,发送需要确定以链接状态(如打电话),辑通信信道是全双工的可靠信道
UDP无连接,发送数据无需确定是否连接(如邮差),则是不可靠信道
将文件分块发送,接收端每收到一块数据就发送一个收到确认给发送方(包括收到的数据长度)
发送方在收到接收方发送的“收到确认”后才接着发送下一块数据。。。。
直到整个文件发送完毕。
每块数据都加一个包头,里面可以包含一些标志信息,如:是否所有数据发送完毕(即最后一个包了)
三次握手简单的说就是:(C:客户端,S:服务端)
C:SYN到S 客户端发送SYN(SEQ=1022)报文给服务器端,客户端进入SYN_SEND状态
S:如成功--返回给C(SYN+ACK),回应一个SYN (SEQ=2032)ACK(ACK=1022+1)报文,服务器段进入SYN_RECV状态。
C:如成功---返回给S(ACK) 客户端收到服务器端的SYN报文,回应一个ACK(ACK=2032+1)报文,进入Established状态。
什么是三级缓存?三级缓存原理
答:网络加载,不优先加载,速度慢,浪费流量
本地缓存,次优先加载,速度快
内存缓存,优先加载,速度最快
首次加载 Android App 时,肯定要通过网络交互来获取图片,之后我们可以将图片保存至本地SD卡和内存中
之后运行 App 时,优先访问内存中的图片缓存,若内存中没有,则加载本地SD卡中的图片,最后选择访问网络。
Service的两种启动方法,有什么区别 ?
答:1.在Context中通过public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法来进行Service与Context的关联并启动,并且Service的生命周期依附于Context(不求同时同分同秒生!但求同时同分同秒屎!!)。
2.通过public ComponentName startService(Intent service)方法去启动一个Service,此时Service的生命周期与启动它的Context无关。
View和SurfaceView的区别?
答:SurfaceView中采用了双缓存技术,在单独的线程中更新界面
View在UI线程中更新界面
当程序需要更新View上的图像时,程序必须重绘View上显示的整张图片
新线程无法直接更新View组件
Android的进程优先级
答:android的系统进程分为五个等级, Foreground Process(前台进程), Visible Process(可见进程), Service Process(服务进程), Background Process(后台进程), Empty Process(空进程)
自定义View相关知识,下拉刷新的实现原理?
答:【1】Header 通常有下拉箭头,文字,进度条等元素,根据下拉的距离来改变它的状态,从而显示不同的样式
【2】Content 这部分是内容区域,网上有很多例子都是直接在ListView里面添加Header,但这就有局限性,因为好多情况下并不一定是用ListView来显示数据。把要显示内容的View放置在一个容器中,如果想实现一个用ListView显示数据的下拉刷新,需要创建一个ListView旋转到容器中。处理这个容器的事件(down,move,up),如果向下拉,则把整个布局向下滑动,从而把header显示出来。
【3】Footer可以用来显示向上拉的箭头,自动加载更多的进度条等。
亦可以使用开源PullToRefreshView
在你项目中所用到的第三方?
Volley xUtils okHttp(支持图片上传) ImageLoader RxJava Retrofix dataBing
Google推荐的图片加载库Glide介绍
目前Android在使用的Json解析框架主要有Jackson、Gson、FastJson、org.json;
源码解析
使用 picasso 加载图片;使用 EventBus 同步不同页面间对象状态
UI框架优化,增加RefreshFragment基类抽取
通过LeakCanary、TraceView等工具进行内存检测,优化内存的使用,构建一套服务业务需求的线程池
熟练掌握okhttp,glide,greenDao等主流框架;
Android中原生HttpClient和HttpUrlConnection来处理网络操作比较复杂,需要我们处理很多操作:如果图片的缓存和请求的调度。
简单的说下Retrofit的使用流程?
Retrofit2在项目中的完整使用流程:创建Bean类 --> 创建接口形式的http请求方法 --> 通过Retrofit.builder()创建接口对象并调用http方法请求网络数据 --> 在RxJava的Observable(被观察者)中异步处理请求结果!
项目中有没有见过内存泄漏以及OOM?为什么会产生?怎么解决的?
内存泄漏它是造成应用程序OOM的主要原因之一
在android应用开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了。
全局变量的滥使用,加载对象过大,相应资源过多,来不及释放,资源未关闭造成的内存泄漏。
在内存引用上做些处理,常用的有软引用、强化引用、弱引用
在内存中加载图片时直接在内存中作处理,如边界压缩
及时回收不用的对象如Bitmap,IO流。
Android系统的有哪些安全机制?
应用程序签名机制,权限申明机制,访问控制机制,进程通讯机制,内存管理机制。
Android-Service和Thread的区别?
service是android四大组件之一,没有任何界面,它不是一个线程,一般在后台默默运行。有自己的生命周期。有本地service和远程service,本地service一般有2中启动方式,startService和bindservice. 远程service就是所谓的AIDL,实现跨进程调用.
thread是java里的一个线程概念,跟service是完全不同的。1中说的service特点,thread在android中大多没有。尤其是生命周期和跨进程调用,thread是没有的。
Android图片缓存之初识Glide
Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较
Asset目录与res目录的区别
ANR问题,force close问题,activity,service,broadcast各自超过多少秒报ANR
Activity启动模式,intent匹配规则
Android反编译
JNI和native方法
Android系统的有哪些安全机制
Dalvik和ART区别
Android屏幕适配有哪些方法
View事件体系,滑动冲突
View绘制原理,性能问题(view绘制间隔16ms,60fps),measure,layout,draw三大过程
如何避免overdraw
Android动画分类和各自特点
View和SurfaceView的区别
APK瘦身的办法
Android如何获取Crash信息
ANR日志分析
Android动态加载,如何解决方法数越界
Android怎么加速启动Activity
Android内存泄漏问题,内存泄漏分析工具
Android内存溢出问题,图片的三级缓存
Zygote和System进程的启动过程
Activity的启动过程
Android的消息机制,Handler原理
HandlerThread和IntentService的原理和特点
Binder机制原理
一个如何维持一个长连接
如何实现进程保活
Binder底层为什么用红黑树,红黑树的原理知道吗
为什么选用Glide,原理?
LruCache的原理
Fragment好处,碰到过什么bug,怎么解决的
如何设计一个网络加载框架
Android四大组件的理解
ContentProvider的启动过程
Activity的四种启动模式,用过哪一种,为什么要用
Service和InentService的区别
View的事件分发和绘制原理
如何解决滑动冲突
多进程通信的方式
广播的使用
广播的种类
如何解决app卡顿的问题,用到哪些工具
view的绘制流
Android的启动流程、四大组件、listview的运用于优化、MVP、两个activity怎么传输数据,intent是怎么实现传输数据的,闹钟怎么实现
fragment,该怎么用,比如实现类似微信的那种滑动,讲了一下fragment的滑动以及底部状态的切换。之后又问了怎么保存view的数据,当时以为就是回调生命周期的方法时保存数据,面试官就给我讲了一下现在常用了的将顶层的view作为变量然后传递引用,之后切换回来的时候直接在oncreateview里面进行判断即可。
Activity与Fragment的生命周期。
Acitivty的四中启动模式与特点。
Service的生命周期,两种启动方法,有什么区别。
怎么保证service不被杀死。
广播的两种注册方法,有什么区别。
Intent的使用方法,可以传递哪些数据类型。
Thread、IntentService的使用场景与特点。
五种布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout、TableLayout各自特点及绘制效率对比。
Android的数据存储形式。
Merge、ViewStub的作用。
Json有什么优劣势。
Handler、Loop消息队列模型,各部分的作用。
怎样退出终止App。
Asset目录与res目录的区别。
Android怎么加速启动Activity。
Android中弱引用与软引用的应用场景。
Bitmap的四中属性,与每种属性队形的大小。
Touch事件分发机制。
Android长连接,怎么处理心跳机制。
Zygote的启动过程。
looper是线程级别还是进程级别
zygote和systemservice的关系
activity四种启动模式
打开一个activity的过程
项目点为什么要用view不用fragment?同样fragment可以解决缓存(用了view,并且设了map作为缓存,为了模拟activity栈重制了新的栈来实现相同的回退功能,需要处理连续点击和多次点击的问题,还需要解决连续点view,缓存增大而oom)
用了什么设计模式?为什么要这么用?(举例了观察者+工厂)
谈一下Collection包:hashmap底层实现,用了什么方法解决hash冲突(基于jdk版本),具体是如何实现(jdk1.5链表头插还是尾插),为什么不安全?如何变得安全(concurrent包下集合类),concurrentHashmap实现原理是?
Executor框架说说你的理解?
结束一条Thread有什么方法?interrupt底层实现有看过吗?线程的状态是怎么样的?如果给你实现会怎么样做?
Io和nio有没有了解?
缓存算法除了lru还认识哪种?
Java中有内存泄露吗?是怎么样的情景?为什么不用循环计数?
ANR产生原因?怎么定位?
ContextImpl的源码使用的设计模式?为什么你认为其中有外观?
在一个app中,只有在一张activity,所有功能业务逻辑在里面实现,现在报ANR,你会怎么做?(代码层面:耗时操作(UI、网络、数据库),工具层面:trace和crashHandle)
Android中ClassLoader和java中有什么关系和区别
Activity生命周期?情景:现在在一张act1点了新的act2,周期如何?
Act的launchMode,有没有结合项目用过(自己的程序锁和微信的PC端登陆对比,不过我现在又发现,应该大约估计可能是动态加载的一个缺陷,如果有找到相关信息,请务必跟我说。具体问题就是,当在PC端登录时,Android终端的微信会跳出,即使wechat的task不是在fore,当按下确认,返回的是wechat,而不是自己先前的app)
View的绘制原理,有没有用canvas自己画过ui?
动态加载主要问题
Assetmanager获取资源原理和资源获取原理
项目Oom异常解决方案+用户体验优化方案
Touch传递机制+listview滑动冲突
项目如何解决oom?响应速度是怎么优化?电量消耗如何优化?
屏幕适配使用的方案?有没有辅助的工具帮助?(hyviewer)
如何分析内存泄露?(代码+工具traceview+mat)
View树绘制?如何优化布局?
事件传递原理?
屏幕适配接触到什么方法?
java内存泄露是怎么样的?(本质+handler例子)
情景题,把handler设static,里面需要对一个view更新,会不会内存泄露?(可达性分析)
UI接触得多吗?有没有用过canvas画过图?
在项目中为什么要用动态加载?最大的问题是什么?怎么解决资源管理问题
描述下Aidl?觉得aidl有什么缺陷
两个应用能使用同一个任务栈么?
大图加载
Http && Https
常用的加密算法,对称加密和非对称加密
Android里的序列化
两个应用间Binder通信的原理
OkHttp如何对链接进行复用
如何设计锁
内存泄漏如何发现(用什么工具)
在纸上写了个Activity,然后在类里面定义了一个Handler,问我这个会有警告,怎么解决?--static、软引用
Handler机制,Handler除了线程通信还有什么作用,这个我说通知吧,因为Android是消息驱动的,不是特别明白面试官要问哪点,难道是延时?
实现一个文件夹列表,面试官要求5000个文件的时候才从ViewGroup转到ListView
ART和Dalvik的区别
批量插入50条联系人,比较高效的方法,ContentProvider是否了解原理
broadcast机制
thread.wait()与thread.sleep()区别
okhttp原理
线程池机制
onSaveInstanceState和onRestoreInstanceState调用的过程和时机,onNewIntent方法
fragment的生命周期,和Activity如何进行通信
Android的事件分发机制,ACTION_DOWN和后续事件如何消耗
View的绘制流程,MeasureSpec如何工作,父的MeasureSpec和自己的LayoutParams
Handler Looper的使用方式,实现机制,设计的原因
HandlerThread有没有了解
ThreadLocal是干嘛的,使用的地方
Service与Thread区别,这个问题应该是必问的了
SQLite能否并发读取或者写入,自己只记得不能并发写,可以并发读
Activity与Service的通信问题,这里要对Binder机制和AIDL比较了解,因为自己没在项目中用过,所以回答的不是很好。这个还可以通Broadcast进行通信。
ViewPager如何判断左滑右滑
android7.0的虚拟机的优化(什么即时编译)
sqlite如何批量插入大量数据,如何提高效率(放到一个事务里)
fragment 和activity之间如何选择(说出自己的理解)
说说推送 ,扯到长连接,心跳包,直接被面试官打断,这个我们都知道,说说保持一个长连接很简单,为什么长连接会带来很多麻烦,还提示从耗电量,微信分析
从listview优化谈到recyclerview,深入分析一下recyclerview特点 ,然后引申到瀑布流如何实现,不使用recyclerview如何实现瀑布流。
属性动画
Android中的几种Context什么区别?这个问题我回答的不好,简单说了一下生命周期和Context的继承关系,以及注意事项弹对话框不能使用applicatuion的上下文
接着问我bitmap能否复用?也是3.0以后的有个Option的inbitmap字段可以复用
平时遇到过OOM没?遇到过,主要是图片加载很常见,我讲了BitmapFactory的解析Options的in...bound参数先读取图片信息进行必要的缩放,还有缓存,讲了DiskLruCache、LruCache缓存策略,以及可以加入软引用,讲了底层的LinkedHashMap实现。