android字体的工作原理
16lz
2021-01-23
Android字体工作原理
android字体由android 2D图形引擎skia实现,并在Zygote的Preloading classes中对系统字体进行load。
相关涉及到:
android的启动过程
ZygoteInit.java中的preloadClasses方法,对
/framework/base/preloaded-classes文件里面的类一一加载
Class.forName("android.graphics.Typeface");
Class.forName()会加载类到DVM(JVM),同时加载static代码块。
( java中class.forName和classLoader都可用来对类进行加载。前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 )
static {
DEFAULT = create((String)null, 0);
DEFAULT_BOLD = create((String)null, Typeface.BOLD);
SANS_SERIF = create("sans-serif", 0);
SERIF = create("serif", 0);
MONOSPACE = create("monospace", 0);
sDefaults = new Typeface[] {
DEFAULT,
DEFAULT_BOLD,
create((String)null, Typeface.ITALIC),
create((String)null, Typeface.BOLD_ITALIC),
};
public static Typeface create(String familyName, int style) {
return new Typeface(nativeCreate(familyName, style));
}
nativeCreate()是jni方法的实现在(**.java里的jni一般名字也是**.cpp)
文件有:Typeface.cpp和skFontHost_android.cpp,其中后者是skia针对android平台字体实现的port。
android字体由android 2D图形引擎skia实现,并在Zygote的Preloading classes中对系统字体进行load。
相关涉及到:
android的启动过程
ZygoteInit.java中的preloadClasses方法,对
/framework/base/preloaded-classes文件里面的类一一加载
Class.forName("android.graphics.Typeface");
Class.forName()会加载类到DVM(JVM),同时加载static代码块。
( java中class.forName和classLoader都可用来对类进行加载。前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 )
static {
DEFAULT = create((String)null, 0);
DEFAULT_BOLD = create((String)null, Typeface.BOLD);
SANS_SERIF = create("sans-serif", 0);
SERIF = create("serif", 0);
MONOSPACE = create("monospace", 0);
sDefaults = new Typeface[] {
DEFAULT,
DEFAULT_BOLD,
create((String)null, Typeface.ITALIC),
create((String)null, Typeface.BOLD_ITALIC),
};
public static Typeface create(String familyName, int style) {
return new Typeface(nativeCreate(familyName, style));
}
nativeCreate()是jni方法的实现在(**.java里的jni一般名字也是**.cpp)
文件有:Typeface.cpp和skFontHost_android.cpp,其中后者是skia针对android平台字体实现的port。
更多相关文章
- android应用自定义字体
- android xml布局文件属性说明
- Android 5.1 API 22 所有sdk文件下载地址
- Android新增AppCompatTextView自适应字体大小和文本宽度
- Android文件的读写
- Android xml资源文件中@、@android:type、@*、?、@+引用写法含义
- android 入门xml布局文件--转
- Android - 文件读写操作 总结
- android中的布局文件