第13章.综合技术
来源:互联网 发布:网络卡盟 编辑:程序博客网 时间:2024/05/15 20:28
- 通过carshhandler来获取应用的carsh信息
- android提供了Thread类中的一个方法setDefaultUncaughtExceptionHandler。平时可以将carsh信息存储到sd卡然后在合适时机上传到服务器。
-自定义一个carshhandler实现UncaughtExceptionHandler。代码点击此处在Application的onCreate方法中设置一下即可。CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(this);
- android提供了Thread类中的一个方法setDefaultUncaughtExceptionHandler。平时可以将carsh信息存储到sd卡然后在合适时机上传到服务器。
2.使用multidex来解决方法数越界
- android单个dex(包含android framework,jar,本身代码)不能超过方法数65536.但是在低版本手机因为dexopt做优化dex没有达到65536也会报错。
首先删除无用的代码。在Android 5.0之前使用multidex需要引入android-support-multidex.jar包;从Android 5.0开始,系统默认支持了multidex,它可以从apk中加载多个dex。Multidex方案主要针对AndroidStudio和Gradle编译环境。在app的module下面添加
android {
...
defaultConfig {
// enable multidex support
multiDexEnabled true
}
...
}
和添加对multidex的依赖
compile 'com.android.support:multidex:1.0.0'
- 最后有三种方案在代码中加入multidex功能。
1.在AndroidManifest文件中指定Application为MultiDexApplication
<application android:name="android.support.multidex.MultiDexApplication"
2.让应用的Application继承自MultiDexApplication 3.重写Application的attachBaseContext方法,这个方法要先于onCreate方法执行 `public class TestApplication extends Application {@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this); //
}
}`
注意采用上面的配置之后,如果应用的方法数没有越界,那么Gradle并不会生成多个dex文件;如果方法数越界后,Gradle就会在apk中打包2个或者多个dex文件,具体会打包多少个dex文件要看当前项目的代码规模
但是同时也带来了问题:1).应用启动速度会降低,因为应用启动的时候会加载额外的dex文件,所以要避免生成较大的dex文件;2).需要做大量的兼容性测试,因为Dalvik LinearAlloc的bug,可能导致使用multidex的应用无法在Android 4.0以前的手机上运行
3.动态加载技术此处转载
(1)动态加载技术又称插件化技术,将应用插件化可以减轻应用的内存和CPU占用,还可以在不发布新版本的情况下更新某些模块。不同的插件化方案各有特色,但是都需要解决三个基础性问题:资源访问,Activity生命周期管理和插件ClassLoader的管理。
(2)宿主和插件:宿主是指普通的apk,插件是经过处理的dex或者apk。在主流的插件化框架中多采用特殊处理的apk作为插件,处理方式往往和编译以及打包环节有关,另外很多插件化框架都需要用到代理Activity的概念,插件Activity的启动大多数是借助一个代理Activity来实现的。
(3)资源访问:宿主程序调起未安装的插件apk,插件中凡是R开头的资源都不能访问了,因为宿主程序中并没有插件的资源,通过R来访问插件的资源是行不通的。 Activity的资源访问是通过ContextImpl来完成的,它有两个方法getAssets()和getResources()方法是用来加载资源的。 具体实现方式是通过反射,调用AssetManager的addAssetPath方法添加插件的路径,然后将插件apk中的资源加载到Resources对象中即可。
(4)Activity生命周期管理:有两种常见的方式,反射方式和接口方式。反射方式就是通过反射去获取Activity的各个生命周期方法,然后在代理Activity中去调用插件Activity对应的生命周期方法即可。 反射方式代码繁琐,性能开销大。接口方式将Activity的生命周期方法提取出来作为一个接口,然后通过代理Activity去调用插件Activity的生命周期方法,这样就完成了插件Activity的生命周期管理。
(5)插件ClassLoader的管理:为了更好地对多插件进行支持,需要合理地去管理各个插件的DexClassLoader,这样同一个插件就可以采用同一个ClassLoader去加载类,从而避免了多个ClassLoader加载同一个类时所引起的类型转换错误。
3.反编译初步
主要介绍使用dex2jar和jd-gui反编译apk和使用apktool对apk进行二次打包
- 第13章.综合技术
- 第13章 综合技术
- 13_综合技术
- 读书笔记(13) 综合技术
- 第十三章 综合技术
- 精通QTP-自动化测试技术领航 第2章2.2.9综合实例练习总结
- 第1章 综合概述
- 综合技术
- 综合技术
- 综合技术
- 第9章 信息检索综合实例
- 程序设计语言综合设计(第 1 章)
- 程序设计语言综合设计(第 2 章)
- 程序设计语言综合设计(第 3 章)
- 程序设计语言综合设计(第 4 章)
- 程序设计语言综合设计(第 5 章)
- 第4章 字符串综合习题(leetcode)
- 技术面试综合谈
- 数据库原理-多值依赖
- [LeetCode]Find Bottom Left Tree Value 寻找二叉树最左树叶的值
- LeetCode 6 ZigZag Conversion 题解
- Python标准库05 存储对象 (pickle包,cPickle包)
- Java 读书笔记8
- 第13章.综合技术
- 欠拟合、过拟合及其解决方法
- 矩形覆盖
- 项目中Angularjs遇到的问题和优化总结
- 什么是TCP/IP
- 初学rnn(1)
- ubuntu 下 caffe 的安装
- 遍历一次实现单链表顺序反转
- IOPS和带宽对存储性能的影响?