碎片 - 1835434698/1835434698.github.io GitHub Wiki
- 加载(Loading)
- 验证(Verification)
- 准备(Preparation)(final修饰的这个阶段进行初始化。)
- 解析(Resolution)
- 初始化(Initialization)
- 使用(Using)
- 卸载(Unloading)(JVM回收)
new创建对象,
Java中new创建对象分为三步:
1.声明对象引用。 2.实例化对象:Java中实例化对象就是创建一个Java对象,即分配内存并返回指向该内存的引用。 3.初始化对象实例:调用构造函数,为类的实例对象赋值
jvm虚拟机
1.线程共享(方法区<类信息、常量《编译期已经创建好》、静态变量>、堆)
2.线程独享(虚拟机栈、本地方法栈、程序计数器)
构造单例的时候尽量别用Activity的引用; 静态引用时注意应用对象的置空或者少用静态引用; 使用静态内部类+软引用代替非静态内部类; 及时取消广播或者观察者注册; 耗时任务、属性动画在Activity销毁时记得cancel; 文件流、Cursor等资源及时关闭; Activity销毁时WebView的移除和销毁。
1.复杂耗时绘制
2.过渡绘制
1:责任链模式:拦截器链
2:单例模式:线程池
3:观察者模式:各种回调监听
4:策略模式:缓存策略
5:Builder模式:OkHttpClient的构建过程
1:UI碎片
2:版本碎片
1、 android2JS
1:old
webview.loadUrl("javascript:javacalljs()");
function javacalljs(){
document.getElementById("showmsg").innerHTML = "JAVA调用了JS的无参函数";
}
2: new(4.4)
webView.evaluateJavascript ( "javascript:callJsByEvaluateJavascript()" , new ValueCallback < String > ( ) { @Override public void onReceiveValue ( String value ) { Toast.makeText ( getApplicationContext ( ) , value , Toast.LENGTH_LONG ).show ( ); } } );
2、 JS2android
οnclick="window.android.jsCallAndroid()
@JavascriptInterface
public void jsCallAndroidArgs(String args){
tvShowmsg.setText(args);
}
1、悲观锁 (目前使用较多)(Synchronized)
锁定资源,直到使用完毕释放。
2、乐观锁( SVN、GIt,业务自己实现)
不锁定资源,写操作时判断版本号,是否需要重试。
3、可重入锁(Synchronized)
排队打水一人多桶。
4、不可重入锁
排队打水一人一桶。
5、公平锁
一个人可以在一个队列中排队多次,但是必须按照顺序打水。
6、非公平锁(Synchronized)
一个人可以在一个队列中排队多次,但是可以一次打完(相当于插队)。
1、ApplicationThread(是一个binder对象)被AMS创建,然后发送Handler通知创建ActivityThread。
2、ActivityThread是一个app的入口。
有main方法,初始化os、存储环境、各种manager(TelephonyServiceManager、StatsServiceManager、MediaServiceManager)、looper循环、new ActivityThread
ActivityThread.attach 设置ApplicationThread相关运行时、dalvikUsed、ActivityTaskManager、ContextImpl、Application启动、
会存储activity的各种生命周期