读《深入理解Java虚拟机》总结<三.java中的新生代和老年代内存>

概念

新生代:新生代中98%的对象都是朝生夕死 (1个eden 区(80%) 和 2个survivor区(10%))。
老年代:存活对象存留的时间比较久。

MinorGC:发生在新生代的垃圾回收。很频繁,速度快。
FullGC:发生在老年代的垃圾回收。发生FullGC通常会伴随一次MinorGC(并非绝对),FullGC会比MinorGc慢10倍以上。

Android屏幕适配 px,dp,dpi及density的关系与深入理解

PX(pixel):

即传统计算机语言中描述的像素,在Android则代表绝对像素。

之所以Android中不推荐使用这种单位,正是因为不同生产厂商,不同品牌,不同屏幕的设备,其分辨率亦不一。

举例来说,我们现在将某个Button的width设为160px,则会出现如下情况:

在分辨率为“320宽”的设备里,该按钮显示占屏幕宽度一半;

在分辨率为“640宽”的设备里,该按钮显示占屏幕宽度的四分之一;

Android 知识点总结(一)

Handler

  1. Handler 的回调方法是在 Looper.loop()所调用的线程进行的;

  2. Handler 的创建需要先调用 Looper.prepare() ,然后再手动调用 loop()方法开启循环;

  3. App 启动时会在ActivityThread.main()方法中创建主线程的 Looper ,并开启循环,所以主线程使用 Handler 不用调用第2点的逻辑;

Android Boardcast 权限的使用

1. 广播的接收权限

设置广播接收权限的目的在于避免自己应用发送的广播被其他恶意应用接收到。简单来说就是定义谁能接收我的广播,用法如下:

首先发送方的应用在清单文件里自定义一个权限:

1
2
<permission android:name="cn.qiracle.RECEIVER"
android:protectionLevel="signature" />

这里 protectionLevel 选择 signature 或者 signatureOrSystem 更加安全。

读《深入理解Java虚拟机》总结<二.java内存模型与线程>

主内存与工作内存

java内存模型规定了所有变量都存储在主内存中。此处的变量是指实例字段,静态字段和构成数组对象的元素。但不包括局部变量与方法参数。因为后者是线程私有的,不会被共享。除主内存之外,每个线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间也无法之间访问对方工作内存中的变量。线程间变量值得传递均需要通过主内存来完成。

|