Android的一些要点记录

记录下工作和学习一些关于Android体会。

引用部分已经加“”

每一个Android程序,其实都是一个独立的java虚拟机,一个独立的进程,这样会确保一个程序崩溃的时候不会影响到其它的程序,android 4.4之前提供的是Dalvik虚拟机,

“Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。一个dex文件可以包含若干个类,而一个class文件只包括一个类。由于一个dex文件可以包含若干个类,因此它就可以将各个类中重复的字符串和其它常数只保存一次,从而节省了空间,这样就适合在内存和处理器速度有限的手机系统中使用。一般来说,包含有相同类的未压缩dex文件稍小于一个已经压缩的jar文件”

当然在开发过程中我遇到过Dex 文件方法数超过了最大值65536的上限的异常,啥原因自行度娘吧,应该是应用启动的时候有个Dexopt对Dex优化的过程,它会把方法按id存在一个链表里面,很不幸这id是short类型的,所以只能存到65536,解决方案的就是让自己的application文件继承MultiDexApplication,如果Application文件已经继承了其它的类,则重写attachBaseContext

@Override 
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base); MultiDex.install(this);
}
然后在gradle配置文件里面加上
 compile 'com.android.support:multidex:1.0.0'
 android{

defaultConfig{

multiDexEnabled true

}

}

当然Android 4.4以后推出了ART(Android runtime)"

"ART模式与Dalvik模式最大的不同在于,启用ART模式后,系统在安装应用的时候会进行一次预编译,将字节码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升"

当然内存管理也做得更好了,减少了卡顿GC回收时的卡顿现象,Dalvik在做GC的时候,其它的线程都要停止运行,而ART做GC是Concurrent,其它线程并不会被中止。而且Dexopt也被替换掉了

回归到进程的管理,android虚拟机进程和linux进程又有些不同,传统的linux进程被结束后,内存释放,而android进程结束,进程继续保留在内存里,这是为了让我们下一次更快速的启动,但是手机内存毕竟有限,达到一定的峰值时,系统就会自动帮我们释放掉那些占内存的进程,一般来说一个Activity处于onStop状态,系统就可以自动kill掉了。但是android还是划分了一个优先级的一般空进程,内容供应节点(content provider)会被最先结束掉,后台进程有选择,前台进程,可见进程如桌面的时钟,一些服务一般不会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值