碎片 - 1835434698/1835434698.github.io GitHub Wiki

1、class加载机制

  1. 加载(Loading)
  2. 验证(Verification)
  3. 准备(Preparation)(final修饰的这个阶段进行初始化。)
  4. 解析(Resolution)
  5. 初始化(Initialization)
  6. 使用(Using)
  7. 卸载(Unloading)(JVM回收)

2、内存分配时机

new创建对象,

Java中new创建对象分为三步:

1.声明对象引用。 2.实例化对象:Java中实例化对象就是创建一个Java对象,即分配内存并返回指向该内存的引用。 3.初始化对象实例:调用构造函数,为类的实例对象赋值

3、内存管理

jvm虚拟机

​ 1.线程共享(方法区<类信息、常量《编译期已经创建好》、静态变量>、堆)

​ 2.线程独享(虚拟机栈、本地方法栈、程序计数器)

4、内存优化

构造单例的时候尽量别用Activity的引用; 静态引用时注意应用对象的置空或者少用静态引用; 使用静态内部类+软引用代替非静态内部类; 及时取消广播或者观察者注册; 耗时任务、属性动画在Activity销毁时记得cancel; 文件流、Cursor等资源及时关闭; Activity销毁时WebView的移除和销毁。

5、ui性能

1.复杂耗时绘制

2.过渡绘制

6、网络(okhttp)

1:责任链模式:拦截器链

2:单例模式:线程池

3:观察者模式:各种回调监听

4:策略模式:缓存策略

5:Builder模式:OkHttpClient的构建过程

7、碎片化

1:UI碎片

2:版本碎片

8、Android与Js相互调

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);

​ }

9、JAVA锁

1、悲观锁 (目前使用较多)(Synchronized)

​ 锁定资源,直到使用完毕释放。

2、乐观锁( SVN、GIt,业务自己实现)

​ 不锁定资源,写操作时判断版本号,是否需要重试。

3、可重入锁(Synchronized)

​ 排队打水一人多桶。

4、不可重入锁

​ 排队打水一人一桶。

5、公平锁

​ 一个人可以在一个队列中排队多次,但是必须按照顺序打水。

6、非公平锁(Synchronized)

一个人可以在一个队列中排队多次,但是可以一次打完(相当于插队)。

10、ActivityThread、ApplicationThread

​ 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的各种生命周期

⚠️ **GitHub.com Fallback** ⚠️