Skip to content

Commit 516b612

Browse files
author
Tan Minghui
committed
Update articles
1 parent 1a23dfb commit 516b612

File tree

8 files changed

+535
-29
lines changed

8 files changed

+535
-29
lines changed

Java/Java 中的锁.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ JVM基于进入和退出Monitor对象来实现方法同步和代码块同步。
4646

4747
注意两点:
4848

49-
1、synchronized同步快对同一条线程来说是**可重入的**,不会出现自己把自己锁死的问题;
49+
1、synchronized同步块对同一条线程来说是**可重入的**,不会出现自己把自己锁死的问题;
5050

5151
2、同步块在已进入的线程执行完之前,会阻塞后面其他线程的进入。
5252

android/ANR.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# ANR
22

3-
4-
3+
- Broadcast 10s
4+
- 前台 Service 20s,后台 Service 200s
5+
- 按键无响应 5s

android/APK 打包过程.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# APK 打包过程
2+
3+
![img](https://user-gold-cdn.xitu.io/2017/3/2/35a4d886bc51ec6be29456eadd4b1fd2.png?imageslim)
4+
5+
1. 通过aapt打包res资源文件,生成R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)
6+
2. 处理.aidl文件,生成对应的Java接口文件
7+
3. 通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件
8+
4. 通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex
9+
5. 通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk
10+
6. 通过Jarsigner工具,对上面的apk进行debug或release签名
11+
7. 通过zipalign工具,将签名后的apk进行对齐处理。

android/Activity 启动模式.md

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ Intent.FLAG_ACTIVITY_NEW_TASK是启动模式中最关键的一个Flag,依据
4242

4343
它与launchMode="singleTop"具有相同的行为。实际上,的确如此!单独的使用FLAG_ACTIVITY_SINGLE_TOP,就能达到和launchMode="singleTop"一样的效果。
4444

45-
46-
4745
### Intent.FLAG_ACTIVITY_CLEAR_TOP
4846

4947
顾名思义,FLAG_ACTIVITY_CLEAR_TOP的作用清除"包含Activity的task"中位于该Activity实例之上的其他Activity实例。FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK两者同时使用,就能达到和launchMode="singleTask"一样的效果。
@@ -56,34 +54,33 @@ FLAG_ACTIVITY_CLEAR_TASK的作用包含Activity的task。使用FLAG_ACTIVITY_CLE
5654

5755
### standard
5856

59-
它是默认模式。在该模式下,Activity可以拥有多个实例,并且这些实例既可以位于同一个task,也可以位于不同的task。
57+
![这里写图片描述](https://img-blog.csdn.net/20170303203558620?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRlcm1lbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6058

61-
![120721093646152](C:\Users\ADMINI~1\AppData\Local\Temp\chrome_drag8408_22453\120721093646152.gif)
59+
它是默认模式。在该模式下,Activity可以拥有多个实例,并且这些实例既可以位于同一个task,也可以位于不同的task。
6260

6361
### singleTop
6462

65-
该模式下,在同一个task中,如果存在该Activity的实例,并且该Activity实例位于栈顶(即,该Activity位于前端),则调用startActivity()时,不再创建该Activity的示例;而仅仅只是调用Activity的onNewIntent()。否则的话,则新建该Activity的实例,并将其置于栈顶。
63+
![这里写图片描述](https://img-blog.csdn.net/20170303204628314?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRlcm1lbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6664

67-
![120721093646153](C:\Users\ADMINI~1\AppData\Local\Temp\chrome_drag8408_15171\120721093646153.gif)
65+
该模式下,在同一个task中,如果存在该Activity的实例,并且该Activity实例位于栈顶(即,该Activity位于前端),则调用startActivity()时,不再创建该Activity的示例;而仅仅只是调用Activity的onNewIntent()。否则的话,则新建该Activity的实例,并将其置于栈顶。
6866

6967
### singleTask
7068

69+
![这里写图片描述](https://img-blog.csdn.net/20170303205023925?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRlcm1lbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
70+
7171
> 在singleTask模式下,如果是第一次创建该Activity实例时,则会新建task并将该Activity添加到该task中。否则(该Activity的实例已存在),则会打开已有的Activity实例,并调用Activity的onNewIntent()方法,而不会新建Activity实例。在任意时刻,最多只会有该一个Activity实例存在。
7272
7373
顾名思义,只容许有一个包含该Activity实例的task存在。
7474

75-
![120721093646154](C:\Users\ADMINI~1\AppData\Local\Temp\chrome_drag8408_28296\120721093646154.gif)
76-
7775
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop。
7876

7977
### singleInstance
78+
![singleInstance](https://inthecheesefactory.com/uploads/source/launchMode/singleInstance.jpg)
8079

8180
> 在该模式下,只允许有一个Activity实例。当第一次创建该Activity实例时,会新建一个task,并将该Activity添加到该task中。注意:该task只能容纳该Activity实例,不会再添加其他的Activity实例!如果该Activity实例已经存在于某个task,则直接跳转到该task。
8281
8382
顾名思义,是单一实例的意思,即任意时刻只允许存在唯一的Activity实例,而且该Activity所在的task不能容纳除该Activity之外的其他Activity实例。
8483

85-
![120721093646155](C:\Users\ADMINI~1\AppData\Local\Temp\chrome_drag8408_22609\120721093646155.gif)
86-
8784
如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例。
8885

8986
### singleTask 和 singleInstance 比较:
@@ -106,5 +103,4 @@ FLAG_ACTIVITY_CLEAR_TASK的作用包含Activity的task。使用FLAG_ACTIVITY_CLE
106103
------
107104

108105
[]: http://wangkuiwu.github.io/2014/06/26/IntentFlag/ "Android 之Activity启动模式(二)之 Intent的Flag属性"
109-
[]: https://juejin.im/post/59b0f25551882538cb1ecae1#heading-1 "Android面试官装逼失败之:Activity的启动模式"
110-
106+
[]: https://juejin.im/post/59b0f25551882538cb1ecae1#heading-1 "Android面试官装逼失败之:Activity的启动模式"

android/LeakCanary 原理.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# LeakCanary 原理
2+
3+
该队列的具体作用就是当发生 GC 后,WeakReference 所持有的对象如果被回收就会进入该队列,所以只要在 activity onDestory 时,把 Activity 对象绑定在 WeakReference 中,然后手动执行一次 GC,然后观察 ReferenceQuery 中是不是包含对应的 Activity 对象,如果不包含,说明 Activity 被强引用,也就是发生了内存泄漏。

0 commit comments

Comments
 (0)