首先,提问:c++与java区别在哪? 从底层看,c++编译生成汇编代码,与相关硬件平台有关系。而java编译生成的class,即字节码。运行在jvm虚拟机之上,被jvm所识别。jvm提供一种抽象,一种系统的仿真。一种隔离。
注意:jvm只提供一个进程的仿真。
静态库与动态库的区别:.a 与.so ,.a在编译,连接时加载。而.so在运行时加载,当一个进程运行时出错,或者没有跑起来,有必要查看它需要的.so是否存在。
linux内核调试打印等级:读写/proc/sys/kernel/printk 文件设置当前日志打印等级。
echo 8 > /proc/sys/kernel/printk
strace 显示系统所有的调用信息。
init进程 读取init.rc 启动servicemanager作为binder的守护进程。
还会启动Zygote孵化进程,调用的是app_main.cpp中的main()方法,继续调用androidRuntime.cpp,在androidRuntim类的start()方法中启动虚拟机,注册一些JNI调用。
通过JNI调用ZygoteInit.java孵化器的初始化 ,在ZygoteInit的main()方法中,创建本地soctet通讯.
又通过调用startSystemServer 创建子进程,在子进程中
调用 RuntimeInit.zygoteInit 做本地初始化。
又调用systemserver.java,在systemserver.java的main()中包含init1()、JNI调用android_server_SystemServer_init1 调用system_init.cpp 做了一些系统初始化工作。
然后runtime->callStatic("com/android/server/SystemServer", "init2")
和init2() 调用Thread thr = new ServerThread();
thr.start(); 线程调用进入其start中 Looper.prepare();之后添加系统远程服务