Skip to content

Commit f834ce5

Browse files
committed
update
1 parent 375ba0b commit f834ce5

7 files changed

Lines changed: 10 additions & 36 deletions

File tree

AdavancedPart/ApplicationId vs PackageName.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ApplicationId vs PackageName
77

88
`Android`官方文档中有一句是这样描述`applicationId`的:`applicationId : the effective packageName`,真是言简意赅,那既然`applicationId`是有效的包明了,`packageName`算啥?
99

10-
所有`Android`应用都有一个包名。包名在设备上能唯一的标示一个应用,它在`Google Play`应用商店中也是唯一的。这就意味着一旦你使用一个包名发布应用后,你就永 远不能改变它的包名;如果你改了包名就会导致你的应用被认为是一个新的应用,并且已经使用你之前应用的用户将不会看到作为更新的新应用包。
10+
所有`Android`应用都有一个包名。包名在设备上能唯一的标识一个应用,它在`Google Play`应用商店中也是唯一的。这就意味着一旦你使用一个包名发布应用后,你就永 远不能改变它的包名;如果你改了包名就会导致你的应用被认为是一个新的应用,并且已经使用你之前应用的用户将不会看到作为更新的新应用包。
1111

1212
之前的`Android Gradle`构建系统中,应用的包名是由你的`manifest`文件中的根元素中的`package`属性定义的:
1313

@@ -86,4 +86,4 @@ buildTypes {
8686
---
8787

8888
- 邮箱 :charon.chui@gmail.com
89-
- Good Luck!
89+
- Good Luck!

AdavancedPart/BroadcastReceiver安全问题.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ BroadcastReceiver安全问题
55
- 保证发送的广播要发送给指定的对象
66
当应用程序发送某个广播时系统会将发送的`Intent`与系统中所有注册的`BroadcastReceiver``IntentFilter`进行匹配,若匹配成功则执行相应的`onReceive`函数。可以通过类似`sendBroadcast(Intent, String)`的接口在发送广播时指定接收者必须具备的`permission`或通过`Intent.setPackage`设置广播仅对某个程序有效。
77

8-
- 保证我接收到的广播室指定对象发送过来的
8+
- 保证我接收到的广播是指定对象发送过来的
99
当应用程序注册了某个广播时,即便设置了`IntentFilter`还是会接收到来自其他应用程序的广播进行匹配判断。对于动态注册的广播可以通过类似`registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)`的接口指定发送者必须具备的`permission`,对于静态注册的广播可以通过`android:exported="false"`属性表示接收者对外部应用程序不可用,即不接受来自外部的广播。
1010

1111
`android.support.v4.content.LocalBroadcastManager`工具类,可以实现在自己的进程内进行局部广播发送与注册,使用它比直接通过sendBroadcast(Intent)发送系统全局广播有以下几个好处:
@@ -46,4 +46,4 @@ protected void onDestroy() {
4646
---
4747

4848
- 邮箱 :charon.chui@gmail.com
49-
- Good Luck!
49+
- Good Luck!

AdavancedPart/ConstraintLaayout简介.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,10 @@ implementation 'com.android.support.constraint:constraint-layout:1.1.0'
224224
它有点类似于`RelativeLayout`,但远比`RelativeLayout`要更强大。
225225
`ConstraintLayout`在测量/布局阶段的性能比 `RelativeLayout`大约高`40%`。
226226

227-
228-
229-
230-
231-
232227
- [Build a Responsive UI with ConstraintLayout](https://developer.android.com/training/constraint-layout/index.html)
233228
- [ConstraintLayout文档](https://developer.android.com/reference/android/support/constraint/package-summary.html)
234229

235230
---
236231

237232
- 邮箱 :charon.chui@gmail.com
238-
- Good Luck!
233+
- Good Luck!

AdavancedPart/Crash及ANR分析.md

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
6、再执行handleAppCrashLocked方法:
1616

1717
当1分钟内同一进程连续crash两次时,且非persistent进程,则直接结束该应用所有activity,并杀死该进程以及同一个进程组下的所有进程。然后再恢复栈顶第一个非finishing状态的activity;
18-
当1分钟内同一进程连续crash两次时,且persistent进程,则只执行恢复栈顶第一个非finishing状态的activity;
18+
当1分钟内同一进程连续crash两次时,且persistent进程,则只执行恢复栈顶第一个非finishing状态的activity;
1919
当1分钟内同一进程未发生连续crash两次时,则执行结束栈顶正在运行activity的流程。
2020

2121
7、通过mUiHandler发送消息SHOW_ERROR_MSG,弹出crash对话框;
@@ -35,10 +35,6 @@
3535

3636

3737

38-
39-
40-
41-
4238
Native Crash
4339

4440
崩溃过程:native crash 时操作系统会向进程发送信号,崩溃信息会写入到 data/tombstones 下,并在 logcat 输出崩溃日志
@@ -70,10 +66,8 @@ ANR排查流程
7066
1、Log获取
7167
1、抓取bugreport
7268
adb shell bugreport > bugreport.txt
73-
复制代码
7469
2、直接导出/data/anr/traces.txt文件
7570
adb pull /data/anr/traces.txt trace.txt
76-
复制代码
7771
2、搜索“ANR in”处log关键点解读
7872

7973

@@ -102,15 +96,13 @@ CPU usage from 18101ms to 0ms ago
10296
如果CPU使用量很少,说明主线程可能阻塞。
10397
3、在bugreport.txt中根据pid和发生时间搜索到阻塞的log处
10498
----- pid 10494 at 2019-11-18 15:28:29 -----
105-
复制代码
10699
4、往下翻找到“main”线程则可看到对应的阻塞log
107100
"main" prio=5 tid=1 Sleeping
108101
| group="main" sCount=1 dsCount=0 flags=1 obj=0x746bf7f0 self=0xe7c8f000
109102
| sysTid=10494 nice=-4 cgrp=default sched=0/0 handle=0xeb6784a4
110103
| state=S schedstat=( 5119636327 325064933 4204 ) utm=460 stm=51 core=4 HZ=100
111104
| stack=0xff575000-0xff577000 stackSize=8MB
112105
| held mutexes=
113-
复制代码
114106
上述关键字段的含义如下所示:
115107

116108
tid:线程号
@@ -123,14 +115,3 @@ stm:该线程在内核态的执行时间(jiffies)
123115
sCount:该线程被挂起的次数
124116
dsCount:该线程被调试器挂起的次数
125117
self:线程本身的地址
126-
127-
128-
129-
130-
131-
132-
133-
134-
135-
136-

AppPublish/Zipalign优化.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ And any files added to an "aligned" archive will not be aligned.
2222
```
2323

2424
大意就是它提供了一个灰常重要滴功能来确保所有未压缩的数据都从文件的开始位置以指定的4字节对齐方式排列,例如图片或者
25-
`raw`文件。当然好处也是大大的,就是能够减少内存的资源消耗。最后他还特意提醒了你一下就是已经在对`apk`签完名之后再用`zipalign`
25+
`raw`文件。当然好处也是大大的,就是能够减少内存的资源消耗。最后他还特意提醒了你一下就是一定在对`apk`签完名之后再用`zipalign`
2626
优化,如果你在之前用,那无效。
2727

2828
废多看用法:

Gradle&Maven/Composing builds简介.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ gradlePlugin {
293293

294294
3. 在versionPlugin/src/main/java/包名/目录下新建Deps.kt文件,添加你的依赖配置,如:
295295

296-
```groovy
296+
```kotlin
297297
package com.xx.xx.versionplugin
298298

299299
class Deps : Plugin<Project> {

SourceAnalysis/Activity启动过程.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Activity启动过程
88

99
今天就来分析一下,我们开启`Activity`主要有两种方式:
1010

11-
- 通过桌面图标启动,桌面就是`Launcher`其实他也是一个应用程序,他也是继承`Activity`
11+
- 通过桌面图标启动,桌面就是`Launcher`,其实他也是一个应用程序,他也是继承`Activity`
1212
- 在程序内部调用`startActivity()`开启。
1313

1414
`Launcher`点击图标其实也是调用了`Activity``startActivity()`方法,所以我们就从`startActivity()`方法入手了。
@@ -141,9 +141,7 @@ public class Instrumentation {
141141
...
142142
}
143143
```
144-
放狗查了下`Instrumentation`的意思是仪器、工具、装置的意思。我就大体翻一下(英语不好- -~,可能不准确)该类是实现应用程序代码的基类,当该类在
145-
启动的状态下运行时,该类会在其他任何应用程序运行前进行初始化,允许你件事所有应用程序与系统的交互。一个`Instrumentation`实例会通过`Manifest`文件
146-
中的`<instrumenttation`标签描述给系统。
144+
放狗查了下`Instrumentation`的意思是仪器、工具、装置的意思。我就大体翻一下:该类是实现应用程序代码的基类,当该在启动的状态下运行时,该类会在其他任何应用程序运行前进行初始化,允许你监视所有应用程序与系统的交互。一个`Instrumentation`实例会通过`Manifest`文件中的`<instrumenttation`标签描述给系统。
147145
所以继续看一下`mInstrumentation.execStartActivity()`:
148146
```java
149147
/**

0 commit comments

Comments
 (0)