Skip to content

Commit fb4958f

Browse files
committed
udpate
1 parent 0a90da5 commit fb4958f

20 files changed

+471
-384
lines changed

AdavancedPart/Android6.0权限系统.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Android6.0权限系统
7676
7777
下面介绍下如何使用`Android Support Library`来检查和请求权限。`Android`框架在`6.0`开始也提供了相同的方法。然而使用`support`包会比较简单,因为这样你就不需要在请求方法时判断当前的系统版本。(后面说的这几个类都是`android.support.v4`中的)
7878

79-
###检查权限
79+
### 检查权限
8080

8181
如果应用需要使用`dangerous permission`,在任何时候执行需要该权限的操作时你都需要检查是否已经授权。用户可能会经常取消授权,所以即使昨天应用已经使用了摄像头,这也不能保证今天仍然有使用摄像头的权限。
8282

@@ -90,11 +90,11 @@ int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
9090
如果应用有该权限,该方法将返回`PackageManager.PERMISSION_GRANTED`,应用可以进行相关的操作。如果应用不能使用该权限,该方法将返回`PERMISSION_DENIED`,这是应用将必须要向用户申请该权限。
9191

9292

93-
###申请使用权限
93+
### 申请使用权限
9494

9595
如果应用需要使用清单文件中申明的`dangerous permission`,它必须要向用户申请来授权。`Android`提供了几种申请授权的方法。使用这些方法时将会弹出一个标准的系统对话框,该对话框不能自定义。
9696

97-
#####说明为什么应用需要使用这些权限
97+
##### 说明为什么应用需要使用这些权限
9898

9999
在一些情况下,你可能需要帮助用力理解为什么需要该权限。例如,一个用户使用了一个照相的应用,用户不会奇怪为什么应用申请使用摄像头的权限,但是用户可能会不理解为什么应用需要获取位置或者联系人的权限。在请求一个权限之前,你需要该用户一个说明。一定要切记不要通过说明来压倒用户。如果你提供了太多的说明,用户可能会感觉沮丧并且会卸载它。
100100

@@ -105,7 +105,7 @@ int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
105105
> ***注意:***如果用户之前拒绝了权限申请并且选择了请求权限对话框中的`Don’t ask again`选项,该方法就会返回`false`。如果设备策略禁止了该应用使用该权限,该方法也会返回`false`。(我测试的时候发现请求权限的对话框中并没有`Don’t asdk again`这一项)
106106
> ![image](https://raw.githubusercontent.com/CharonChui/Pictures/master/request_permission_dialog.png?raw=true)
107107
108-
#####申请需要的权限
108+
##### 申请需要的权限
109109

110110
如果应用没有所需的权限时,应用必须调用`ActivityCompat.requestPermissions (Activity activity,
111111
String[] permissions,
@@ -147,7 +147,7 @@ if (ContextCompat.checkSelfPermission(thisActivity,
147147

148148
> ***注意:***当调用`requestPermissions()`方法时,系统会显示一个标准的对话框。应用不能指定或者改变该对话框。如果你想提供一些信息或者说明给用户,你需要在调用`requestPermissions()`之前处理。
149149
150-
#####处理请求权限的的结果
150+
##### 处理请求权限的的结果
151151

152152
如果应用申请权限,系统会显示一个对话框。当用户相应后,系统会调用应用中的`onRequestPermissionsResult (int requestCode,
153153
String[] permissions,

AdavancedPart/Android卸载反馈.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,11 @@ void Java_com_charon_uninstallfeedback_MainActivity_initUninstallFeedback(
129129
- 编译so文件。`Windows`下要用`cygwin`来操作。
130130
上面的介绍是在`Eclipse`中进行的,用`ndk-build`命令来编译`so`。具体请看之前写的`JNI基础`这篇文章。
131131
132-
有关如何在`Android Stuido`中进行`ndk`开发请看另一篇文章
132+
有关如何在[Android Stuido中进行ndk开发请看][1]
133133
134+
135+
[1]: https://github.com/CharonChui/AndroidNote/blob/master/AndroidStudioCourse/AndroidStudio%E4%B8%AD%E8%BF%9B%E8%A1%8Cndk%E5%BC%80%E5%8F%91.md "Android Stuido中进行ndk开发"
136+
134137
---
135138
136139
- 邮箱 :charon.chui@gmail.com

AdavancedPart/Android开发中的MVP模式详解.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Android开发中的MVP模式详解
22
===
33

4-
[MVC、MVP、MVVM介绍](https://github.com/CharonChui/AndroidNote/blob/master/JavaKnowledgePart/MVC%E4%B8%8EMVP%E5%8F%8AMVVM.md)
4+
[MVC、MVP、MVVM介绍][1]
55

66
![image](https://raw.githubusercontent.com/CharonChui/Pictures/master/android_mvp.jpg?raw=true)
77

@@ -11,7 +11,7 @@ Android开发中的MVP模式详解
1111

1212
这就是为什么要清晰架构的原因之一。不仅是因为`Activity`类变得臃肿,也是其他的一些问题,例如`Activity``Fragment`相结合时的生命周期、数据绑定等等。
1313

14-
###MVP简介
14+
### MVP简介
1515

1616
`MVP(Model,View,Presenter)`
1717

@@ -587,7 +587,7 @@ public void getTask(@NonNull final String taskId, @NonNull final GetTaskCallback
587587

588588

589589

590-
590+
[1]: https://github.com/CharonChui/AndroidNote/blob/master/JavaKnowledge/MVC%E4%B8%8EMVP%E5%8F%8AMVVM.md "MVC、MVP、MVVM介绍"
591591

592592
---
593593

AdavancedPart/Handler导致内存泄露分析.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Handler导致内存泄露分析
22
===
33

4-
有关内存泄露请猛戳[内存泄露](https://github.com/CharonChui/AndroidNote/blob/master/Android%E5%9F%BA%E7%A1%80/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F.md)
4+
有关内存泄露请猛戳[内存泄露][1]
55

66
```java
77
Handler mHandler = new Handler() {
@@ -20,7 +20,7 @@ Handler mHandler = new Handler() {
2020
会有一条链`MessageQueue -> Message -> Handler -> Activity`,由于它的引用导致你的`Activity`被持有引用而无法被回收`
2121
- **在java中,no-static的内部类会隐式的持有当前类的一个引用。static的内部类则没有。**
2222

23-
##具体分析
23+
## 具体分析
2424
```java
2525
public class SampleActivity extends Activity {
2626

@@ -46,7 +46,7 @@ public class SampleActivity extends Activity {
4646
```
4747
在`finish()`的时候,该`Message`还没有被处理,`Message`持有`Handler`,`Handler`持有`Activity`,这样会导致该`Activity`不会被回收,就发生了内存泄露.
4848

49-
##解决方法
49+
## 解决方法
5050
- 通过程序逻辑来进行保护。
5151
- 如果`Handler`中执行的是耗时的操作,在关闭`Activity`的时候停掉你的后台线程。线程停掉了,就相当于切断了`Handler`和外部连接的线,
5252
`Activity`自然会在合适的时候被回收。
@@ -97,6 +97,7 @@ public class MyActivity extends Activity {
9797
}
9898
```
9999

100+
[1]: https://github.com/CharonChui/AndroidNote/blob/master/BasicKnowledge/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F.md "内存泄露""
100101

101102
---
102103

AdavancedPart/RecyclerView专题.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
1212

1313

1414

15-
#####专业术语:
15+
##### 专业术语:
1616

1717
- `Adapter`: `A subclass of RecyclerView.Adapter responsible for providing views that represent items in a data set.`
1818
- `Position`: `The position of a data item within an Adapter.`
@@ -22,7 +22,7 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
2222
- `Scrap (view)`: `A child view that has entered into a temporarily detached state during layout. Scrap views may be reused without becoming fully detached from the parent RecyclerView, either unmodified if no rebinding is required or modified by the adapter if the view was considered dirty.`
2323
- `Dirty (view)`: `A child view that must be rebound by the adapter before being displayed.`
2424

25-
#####`RecyclerView`中的位置:
25+
##### `RecyclerView`中的位置:
2626

2727
`RecyclerView``RecyclerView.Adapter``RecyclerView.LayoutManager`中引进了一个抽象的额外中间层来保证在布局计算的过程中能批量的监听到数据变化。这样介绍了`LayoutManager`追踪`adapter`数据变化来计算动画的时间。因为所有的`View`绑定都是在同一时间执行,所以这样也提高了性能和避免了一些非必要的绑定。
2828
因为这个原因,在`RecylcerView`中有两种`position`类型相关的方法:
@@ -36,7 +36,7 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
3636

3737

3838

39-
###结构
39+
### 结构
4040

4141
- `RecyclerView.Adapter`: 创建View并将数据集合绑定到View上
4242
- `ViewHolder`: 持有所有的用于绑定数据或者需要操作的View
@@ -47,20 +47,20 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
4747
下图能更直观的了解:
4848
![image](https://raw.githubusercontent.com/CharonChui/Pictures/master/RecyclerView.png?raw=true)
4949

50-
#####`RecyclerView`提供这些内置布局管理器:
50+
##### `RecyclerView`提供这些内置布局管理器:
5151

5252
- `LinearLayoutManager`: 以垂直或水平滚动列表方式显示项目。
5353
- `GridLayoutManager`: 在网格中显示项目。
5454
- `StaggeredGridLayoutManager`: 在分散对齐网格中显示项目。
5555

56-
#####`RecyclerView.ItemDecoration`是一个抽象类,可以通过重写以下三个方法,来实现Item之间的偏移量或者装饰效果:
56+
##### `RecyclerView.ItemDecoration`是一个抽象类,可以通过重写以下三个方法,来实现Item之间的偏移量或者装饰效果:
5757

5858
- `public void onDraw(Canvas c, RecyclerView parent)` 装饰的绘制在Item条目绘制之前调用,所以这有可能被Item的内容所遮挡
5959
- `public void onDrawOver(Canvas c, RecyclerView parent)` 装饰的绘制在Item条目绘制之后调用,因此装饰将浮于Item之上
6060
- `public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent)` 与padding或margin类似,LayoutManager在测量阶段会调用该方法,计算出每一个Item的正确尺寸并设置偏移量。
6161

6262

63-
#####`ItemAnimator`触发于以下三种事件:
63+
##### `ItemAnimator`触发于以下三种事件:
6464

6565
- 某条数据被插入到数据集合中
6666
- 从数据集合中移除某条数据
@@ -74,7 +74,7 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
7474

7575

7676

77-
###使用介绍:
77+
### 使用介绍:
7878

7979
- 添加依赖库
8080
```
@@ -179,7 +179,7 @@ RecyclerView比listview更先进更灵活,对于很多的视图它就是一个
179179
180180
181181
182-
###点击事件
182+
### 点击事件
183183
184184
之前在使用`ListView`的时候,设置点击事件是非常方便的。
185185
```java
@@ -555,7 +555,7 @@ manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
555555
```
556556
具体实现就不写了。
557557

558-
#####实现滑动自动加载更多功能
558+
##### 实现滑动自动加载更多功能
559559

560560
实现方式和`ListView`的实现方式类似,就是通过监听`scroll`时间,然后判断当前显示的`item`。
561561

AdavancedPart/热修复实现.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
===
44

55

6-
现在的热修复方案已经有很多了,例如`alibaba`[dexposed](https://github.com/alibaba/dexposed)[AndFix](https://github.com/alibaba/AndFix)以及`jasonross`[Nuwa](https://github.com/jasonross/Nuwa)等等。原来没有仔细去分析过也没想写这篇文章,但是之前[InstantRun详解](https://github.com/CharonChui/AndroidNote/blob/master/Android加强/InstantRun详解.md)这篇文章中介绍了`Android Studio Instant Run`
6+
现在的热修复方案已经有很多了,例如`alibaba`[dexposed](https://github.com/alibaba/dexposed)[AndFix](https://github.com/alibaba/AndFix)以及`jasonross`[Nuwa](https://github.com/jasonross/Nuwa)等等。原来没有仔细去分析过也没想写这篇文章,但是之前[InstantRun详解][1]这篇文章中介绍了`Android Studio Instant Run`
77
实现原理,这不就是活生生的一个热修复吗? 随心情久久不能平复,我们何不用这种方式来实现。
88

99

@@ -777,6 +777,10 @@ protected void onResume() {
777777
- [](http://weishu.me/)
778778
- [](http://www.zjutkz.net/2016/05/23/%E5%BD%93%E4%BD%A0%E5%87%86%E5%A4%87%E5%BC%80%E5%8F%91%E4%B8%80%E4%B8%AA%E7%83%AD%E4%BF%AE%E5%A4%8D%E6%A1%86%E6%9E%B6%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E4%BD%A0%E9%9C%80%E8%A6%81%E4%BA%86%E8%A7%A3%E7%9A%84%E4%B8%80%E5%88%87/)
779779

780+
781+
[1]: https://github.com/CharonChui/AndroidNote/blob/master/SourceAnalysis/InstantRun%E8%AF%A6%E8%A7%A3.md "InstantRun详解"
782+
783+
780784
---
781785

782786
- 邮箱 :charon.chui@gmail.com

AdavancedPart/通过Hardware Layer提高动画性能.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
项目中越来越多的动画,越来越多的效果导致了应用性能越来越低。该如何提升。
55

6-
###简介
6+
### 简介
77

88
`View`播放动画的过程中每一帧都需要被重绘。如果使用`view layers`,就不用每帧都去重绘,因为`View`渲染一旦离开屏幕缓冲区就可以被重用。
99

@@ -91,7 +91,7 @@ mView.animate().translationX(150).withLayer().start();
9191
这样做,你的动画就会变得更流畅!
9292

9393

94-
###注意事项
94+
### 注意事项
9595

9696
你应该知道,事情没那么简单。
9797
`Hardware layers`有着惊人的提升动画性能的能力。然而,如果滥用,它的危害更大。**不要盲目的使用`layers`**

0 commit comments

Comments
 (0)