1.CrashHandler
当crash发生的时候,系统会调用UncaughtExceptionHandler的uncaughtException方法,在其方法中就可以捕获异常,存储到SD卡或者上传至服务器中。也可以集成三方的例如:腾讯的bugly,具体工具类网上很多,不细说了。。。
2.Mutlidex方法数越界问题
Android中单个dex文件能包含的最大方法数为655536,它包含frameWork,依赖jar包及应用本身的代码中的方法数。当应用方法数达到65536后,编译器就无法完成编译工作并抛出异常:DexIndexOverflowException
解决办法:5.0需要自己导入android-support-multidex.jar这个jar包,5.0之后,android默认支持次jar包
具体步骤网上很多不说了,主要思想就是如果越界,gradle就会在apk中打2个或者多个dex文件
局限性:导致应用启动速度变慢,在一些机型上可能出现奔溃
3.Android动态加载技术(插件化)
插件化都必须解决三个基础问题:资源访问、Activity生命周期的管理、ClassLoader的管理
Android项目中,动态加载技术按照加载的可执行文件的不同大致可以分为两种:
①动态加载so库;
HotFix
②基于ClassLoader的动态加载dex/jar/apk文件(现在动态加载普遍说的是这种);tinker
基本流程:
①把可执行文件(.so/dex/jar/apk)拷贝到应用APP内部存储;
②加载可执行文件;
③调用具体的方法执行业务逻辑;
应用启动的时候,都会fork zygote进程,装载class和invoke各种初始化方法