细谈Activity四种启动模式
https://blog.csdn.net/zy_jibai/article/details/80587083
TCP和UDP的区别和优缺点
https://blog.csdn.net/qq_34624951/article/details/82669444
Android 中内存泄漏的原因分析及解决方案
https://blog.csdn.net/tangxueqin/article/details/80116648
Android 关于内存泄露,你必须了解的东西
https://www.jianshu.com/p/65f914e6a2f8
1. handler机制的原理
andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。
Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;
或者接收Looper从Message Queue取出)所送来的消息。
3) Message Queue(消息队列):用来存放线程放入的消息。
4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。
2.Listview你是怎么优化的。
1.减少创建view的对象,充分使用convertview,可以使用一静态类来优化处理getview的过程
3.GC内存泄露原因及解决方案
可能出现内存泄漏的情况:
1.数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview
衍生listview的优化问题-----减少创建view的对象,充分使用contentview,
可以使用一静态类来优化处理getview的过程
3.Bitmap对象不使用时采用recycle()释放内存
4.activity中的对象的生命周期大于activity
调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]
4. 什么是ANR以及如何避免它?
ANR:Application Not Responding,五秒
在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。
当出现下列情况时,Android就会显示ANR对话框了:
1. 对输入事件(如按键、触摸屏事件)的响应超过5秒
2. 意向接受器(intentReceiver)超过10秒钟仍未执行完毕
Android应用程序完全运行在一个独立的线程中(例如main)。
这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。
因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。
因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。
特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。
潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,
需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。
但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()方法。
取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它
(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。
使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,
从而避免因为输入事件超过5秒钟不被处理而产生的ANR。
这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。
5.在就是你项目经验,突出你遇到什么难点,然后是怎么解决的?(尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。)
这个要想一下,经常被问到
1.版本适配问题,比如SayToken在4.4手机上闪退,后来发现是Ripple背景的原因,因为只有5.0手机上才有这个问题,但是难点是4.4手机不报具体错误,
我只能通过debug一步一步去调试,最后锁定一段代码,发现是引用了ripple背景引发的bug
2.
3.
4.