面试整理(二)

http://www.androidblog.cn/ Android博客周刊


Android 面试汇总


1、类加载器,DexClassLoader 和 PathClassLoader区别

http://bbs.9ria.com/thread-252531-1-1.html

PathClassLoader是通过构造函数new DexFile(path)来产生DexFile对象的;而DexClassLoader则是通过其静态方法loadDex(path, outpath, 0)得到DexFile对象。这两者的区别在于DexClassLoader需要提供一个可写的outpath路径,用来释放.apk包或者.jar包中的dex文件。换个说法来说,就是PathClassLoader不能主动从zip包中释放出dex,因此只支持直接操作dex格式文件,或者已经安装的apk(因为已经安装的apk在cache中存在缓存的dex文件)。而DexClassLoader可以支持.apk、.jar和.dex文件,并且会在指定的outpath路径释放出dex文件。
另外,PathClassLoader在加载类时调用的是DexFile的loadClassBinaryName,而DexClassLoader调用的是loadClass。因此,在使用PathClassLoader时类全名需要用”/”替换”.”。
双亲委托机制   apk动态加载机制  插件化开发
动态代理  

2、线程中如何更新ui方法,view.post,handler.post,runOnUiThread
 
public boolean post(Runnable action) {
        final AttachInfo attachInfo = mAttachInfo;
        if (attachInfo != null) {
            return attachInfo.mHandler.post(action);
        }
        ViewRootImpl.getRunQueue().post(action);
        return true;
    }

  public final void runOnUiThread(Runnable action) {
        if (Thread.currentThread() != mUiThread) {
            mHandler.post(action);
        } else {
            action.run();
        }
    }
mUiThread = Thread.currentThread();在attach方法中获取的,它是主线程



3、View dispatchDragEvent,onTouchEvent
   ViewGroup 必须onLayout,onInterceptTouchEvent默认返回false,dispatchDragEvent,onTouchEvent(true消费事件)

   事件执行顺序

    view绘制流程

4、  自定义组件


5、 dip设备独立像素,如果指定占手机宽度一般,所有(手机)分辨率都占一般。 px 如果是px则显示长度不一 区别 sp

      dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

      屏幕适配




6、 dom sax pull: sax 和 pull区别:
sax 缺点:单遍解析,使它不能支持随机访问,必须实现多个事件处理程序以便能够处理所有到来的事件.SAX很少被用于操作或修改文档。不能停止解析,一旦开始就到结束,除非手动停止(抛出异常和设置标志位)。
Pull解析器和SAX解析器虽有区别但也有相似性。他们的区别为:SAX解析器的工作方式是自动将事件推入注册的事件处理器进行处理,因此你不能控制事件的处理主动结束;
http://www.cnblogs.com/xiaoluo501395377/p/3444744.html

而Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。这是他们主要的区别。


7、activity 启动模式,任务栈相关知识


8、四大组件(服务)广播,注册方式,区别,生命周期,响应时间
 

9、代码混淆 ,混淆时四大组件不能混淆, 代码安全  加壳技术

Android 动态加载(防止逆向编译)技术



10、app 加载流程,进程,入口,入口之前的流程


11、方法数超过65k如何处理?1、插件开发,2、分包处理


12、精通常用数据结构与算法,常用算法,冒泡,选择算法(选出最大或最小),插入算法(从第二个元素开始,将其插入到前面有序列中,先找位置,在进行元素移动),快速排序,二叉树排序(前序,后序,中序)
归并算法  算法第四版   白话经典算法

13、Fragent生命周期,Fragment嵌套时出现情况,上下文为空,onActivityResult接收不到

http://blog.csdn.net/lmj623565791/article/details/37970961   Fragment遇到问题   fragment嵌套问题  Fragment重叠 Fragment无UI保存数据

Fragment官方解析 Fragment问题汇总

Fragment陷阱极优化



14、listview优化,性能优化,布局优化,资源优化(及时关闭或释放资源),多布局实现


15、缓存算法:LruCache .... 如何命中 命中概率

LRU算法



16、图片处理,缩放和压缩


17、JNI NDK 相关


18、Window源码


19、网络协议 http协议,Tcp/Ip协议

多线程

20、 Dalvik虚拟机类加载机制

21、二维码登陆


22、Looper,Handle,Message,MessageQueue 之间的关系

 Looper、Handler、Message三者关系

开发过程中有时候会在Thread类中执行某些操作,有些操作会由于Android版本的不同,尤其是低版本而Crash,因此必要的时候会查看某些容易引起crash的操作是否是在主线程,这里举三种方法:
方法一:使用Looper类判断
Looper.myLooper() == Looper.getMainLooper()
方法二:通过查看Thread类的当前线程
Thread.currentThread() == Looper.getMainLooper().getThread()

Handler防止内存泄露   Handler在主线程与子线程之间互发消息

23、Android系统性能调优工具

TraceView 分析工具


24、java相关 Java内存区域和GC机制   GC的工作原理


25 进程   Android下写一个永远不会被KILL掉的进程/服务  优雅的杀死后台服务而不启动   如何写一个不会被系统自动 kill 的程序(android开发)(已封装)

Service服务详解以及如何使service服务不被杀死

26 设计模式

  代理模式   java动态代理 注解应用动态代理



27、布局优化

深入LayoutInflater   识别绘制中的性能问题


28、第三方框架源码阅读

EventBus实战   ImageLoader源码解析  lmj的ImageLoader


29、控件动画

ViewPager切换动画


30、

android开发中遇到的问题汇总【三】

android开发中遇到的问题汇总四


31 Android WebView

Android WebView常见问题及解决方案汇总  Android学习之 WebView使用小结


32、系统管理

Android静默安装实现方案,仿360手机助手秒装和智能安装功能   Android Messenger完全解析 实现进程间通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值