├── Android M Changes.md ├── Android N Change.md ├── Android-Develope-Question.md ├── Android-Fast-Develope-Library.md ├── Android-Question-Lists.md ├── AndroidManiFest总目录.md ├── Android高级技能.md ├── Http研究.md ├── MarkDown.md ├── README.md ├── React Native相关.md └── System App Develope.md /Android M Changes.md: -------------------------------------------------------------------------------- 1 | Android6.0改变 2 | 3 | [Android 6.0 Changes](https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id) 4 | -------------------------------------------------------------------------------- /Android N Change.md: -------------------------------------------------------------------------------- 1 | Android7.0新特性 2 | 3 | [Android N for Developers](https://developer.android.com/about/versions/nougat/android-7.0.html) -------------------------------------------------------------------------------- /Android-Develope-Question.md: -------------------------------------------------------------------------------- 1 | # Android开发中的问题 2 | 3 | 4 | [TOC] 5 | 6 | 7 | 8 | ## 使用ButterKnife的正确姿势 9 | 10 | 1、在项目的**build.gradle**中添加**android-apt**插件 11 | ```gradle 12 | buildscript { 13 | repositories { 14 | mavenCentral() 15 | } 16 | dependencies { 17 | classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 18 | } 19 | } 20 | ``` 21 | 22 | 2、在**app/build.gradle**中添加如下代码 23 | ```gradle 24 | apply plugin: 'android-apt' 25 | 26 | android { 27 | ... 28 | } 29 | 30 | dependencies { 31 | compile 'com.jakewharton:butterknife:8.4.0' 32 | apt 'com.jakewharton:butterknife-compiler:8.4.0' 33 | } 34 | ``` 35 | 36 | ## Java关键字native 37 | 38 | [Java中的native关键字浅析(Java Native Interface)](http://blog.csdn.net/yangjiali014/article/details/1633017) 39 | 40 | 41 | 42 | ## Android序列化方式:Serializable和Parcelable 43 | 44 | 45 | ## [Android动态加载基础 ClassLoader工作机制](https://segmentfault.com/a/1190000004062880) 46 | 47 | ## [OkHttp跟Retrofit的区别](http://blog.csdn.net/lmj623565791/article/details/51304204) 48 | 49 | ## [自定义View](http://www.jianshu.com/p/d507e3514b65) 50 | 51 | - View是怎样被显示到屏幕上的? 52 | 53 | ![](http://ob35pbpax.bkt.clouddn.com/%E8%87%AA%E5%AE%9A%E4%B9%89View.png?e=1473221466&token=b_hRB7WBnNMHUhLIZNEP-DlJC_-17UnRgWlnj5VG:v6s4lAQyjZ_BA32ceoSIYfr5DOU) 54 | 55 | - 自定义View大小 56 | 57 | ![](http://ob35pbpax.bkt.clouddn.com/%E8%87%AA%E5%AE%9A%E4%B9%89View%E5%A4%A7%E5%B0%8F.png?e=1473222942&token=b_hRB7WBnNMHUhLIZNEP-DlJC_-17UnRgWlnj5VG:jPbWt2s671GHVrDmUJsM616GlSc) 58 | 59 | - View的生命周期 60 | 61 | ![](http://ob35pbpax.bkt.clouddn.com/View%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png?e=1473229654&token=b_hRB7WBnNMHUhLIZNEP-DlJC_-17UnRgWlnj5VG:TMBPIR2_UXtK8HRRWZQNlYfFMyc) 62 | 63 | - [View相关](https://developer.android.com/reference/android/view/View.html) 64 | 65 | 66 | 67 | ## JsBridge相关 68 | 69 | [Android JSBridge的原理与实现](http://blog.csdn.net/sbsujjbcy/article/details/50752595) 70 | 71 | ## Hybrid开发 72 | 73 | - [Hybrid APP架构设计思路](https://segmentfault.com/a/1190000004263182) 74 | 75 | - [【腾讯bugly干货分享】解耦---Hybrid H5跨平台性思考](https://segmentfault.com/a/1190000005871087) 76 | 77 | 78 | -------------------------------------------------------------------------------- /Android-Fast-Develope-Library.md: -------------------------------------------------------------------------------- 1 | # Android快速开发库整理 2 | 3 | 4 | [TOC] 5 | 6 | 7 | 8 | ## [SQLBrite](https://github.com/square/sqlbrite) 9 | 10 | A lightweight wrapper around SQLiteOpenHelper which introduces reactive stream semantics to SQL operations. 11 | 12 | ## [SQLDelight](https://github.com/square/sqldelight/) 13 | 14 | SQLDelight generates Java models from your SQL CREATE TABLE statements. These models give you a typesafe API to read & write the rows of your tables. It helps you to keep your SQL statements together, organized, and easy to access from Java. 15 | 16 | ## [AutoValue](https://github.com/google/auto/tree/master/value) 17 | 18 | A collection of source code generators for Java. 19 | 20 | ## [Stetho](https://github.com/facebook/stetho) 21 | 22 | Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more. 23 | 24 | ## [Treasure](https://github.com/baoyongzhang/Treasure) 25 | 26 | **Treasure**是一个Android平台上基于**SharePreferences**的偏好存储库,只需要定义接口,无需编写实现,默认支持**Serializable**和**Parcelable**。运行时0反射,不仅使用方便而且性能和原生写法几乎无差别。 27 | 28 | ## [饿了么开源的Android进程间通信库-HermesEventBus](https://github.com/eleme/HermesEventBus) 29 | 30 | [原理讲解](https://elelogistics.github.io/2016/07/13/HermesEventBus-%E4%B8%80%E7%A7%8D%E6%96%B0%E7%9A%84Android%E8%B7%A8%E8%BF%9B%E7%A8%8B%E4%BA%8B%E4%BB%B6%E5%88%86%E5%8F%91%E6%A1%86%E6%9E%B6/) 31 | 32 | A library for using EventBus between processes, useful in the IPC or plugin development. 33 | 34 | ## [ToyRoom-饿了么开源的Android业务流框架](https://github.com/eleme/ToyRoom) 35 | 36 | [原理讲解](https://elelogistics.github.io/2016/09/05/ToyRoom-%E9%A5%BF%E4%BA%86%E4%B9%88%E5%BC%80%E6%BA%90%E7%9A%84Android%E4%B8%9A%E5%8A%A1%E6%B5%81%E6%A1%86%E6%9E%B6/) 37 | 38 | A Shelly-based library for business-logic-oriented programming. Shelly plays Domino in ToyRoom. 39 | 40 | ## [简单易用的安卓进程间通信IPC框架](https://github.com/Xiaofei-it/Hermes) 41 | 42 | A smart, novel and easy-to-use framework for Android Inter-Process Communication (IPC). 43 | 44 | ## [在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库](https://github.com/DoubleDa/TakePhoto) 45 | 46 | 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。 47 | 48 | ## [SoLoader](https://github.com/facebook/SoLoader) 49 | 50 | Native code loader for Android 51 | 52 | [React-Native系列Android——SoLoader加载动态链接库](http://blog.csdn.net/megatronkings/article/details/51339639) 53 | 54 | ## RxJava 55 | 56 | 一个使用Observable序列实现包含异步和基于事件的编程方式框架。扩展自观察者模式,实现数据、事件序列,并提供了很多Operators可以随意转换Observable,而无需顾虑线程安全,并发同步等。 57 | 58 | [给 Android 开发者的 RxJava 详解](http://gank.io/post/560e15be2dca930e00da1083#toc_7) 59 | 60 | [Awesome-RxJava](https://github.com/lzyzsd/Awesome-RxJava) 61 | 62 | ## [RxAndroid](https://github.com/ReactiveX/RxAndroid/wiki) 63 | 64 | RxJava的Android扩展。 65 | 66 | ## [RxLifecycle](https://github.com/trello/RxLifecycle) 67 | 68 | 基于RxJava的Activity、Fragment生命周期控制组件。结合RxJava请求使用可以根据Activity、Fragment生命周期自动完成事件序列。避免需要手动调用unsubscribe。 69 | 70 | ## [RxBinding](https://github.com/JakeWharton/RxBinding) 71 | 72 | Jake大神的大作, 用来将View的事件转换成Rx模式 (大家可以跟随项目见证它的妙处). 73 | 74 | ## [android_dbinspector](https://github.com/infinum/android_dbinspector) 75 | 76 | 数据库查看库。 77 | 78 | ## [battery-historian](https://github.com/google/battery-historian) 79 | 80 | Battery Historian is a tool to analyze battery consumers using Android "bugreport" files. 81 | 82 | ## [Emmagee](https://github.com/NetEase/Emmagee) 83 | 84 | Android performance test tool-CPU,memory,network traffic,starting time,battery current and status 85 | 86 | ## [AndroidDevMetrics](https://github.com/frogermcs/AndroidDevMetrics) 87 | 88 | Performance metrics library for Android development (includes dagger2metrics) 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /Android-Question-Lists.md: -------------------------------------------------------------------------------- 1 | Android开发问题 2 | 3 | - [在Android中使用反射到底有多慢?](http://blog.nimbledroid.com/2016/02/23/slow-Android-reflection-zh.html) 4 | - [ListView与ScrollView嵌套、ListView嵌套ListView时,子ListView显示不全](http://182.92.72.114/forum.php?mod=viewthread&tid=433&extra=page%3D3) 5 | 6 | - Android进程间通信的方式 7 | 8 | (1)Intent 9 | (2)AIDL 10 | (3)[HermesEventBus](https://github.com/Xiaofei-it/Hermes) 11 | (4)Messageer 12 | 13 | 14 | - [ScrollView 嵌套 RecyclerView 高度自适应](http://chinauv.lofter.com/post/1cc83a20_957e749) 15 | 16 | - [Android微信上的SVG](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0909/3433.html) 17 | 18 | - [WebP 探寻之路](https://isux.tencent.com/introduction-of-webp.html) 19 | 20 | protobuf与flatbuff 21 | 22 | - [FlatBuffers in Android - introduction](http://frogermcs.github.io/flatbuffers-in-android-introdution/) 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /AndroidManiFest总目录.md: -------------------------------------------------------------------------------- 1 | AndroidManiFest总目录 2 | 3 | 4 | [TOC] 5 | 6 | 7 | 8 | ## manifest 9 | 10 | ### 语法 11 | 12 | ```xml 13 | 21 | . . . 22 | 23 | ``` 24 | 25 | > 说明 26 | 1、internalOnly:应用必须安装在设备内部存储器。如果设置了这个属性,应用将不会被安装到外部设备。如果内部设备已经满了,系统将不会安装应用。如果不声明android:installLocation属性系统将会把安装到内部存储器作为默认选项。 27 | 2、auto:应用也许会被安装到外部存储器上,但是默认情况下,应用会被系统安装到内部存储器。如果内部存储器已经满了,系统将会把应用安装到外部存储器。一旦安装成功,用户可以通过设置选项将应用的安装目录在内部存储器与外部存储器之间切换。 28 | 3、preferExternal:应用更喜欢被安装到外部存储器(即SD卡)。这儿不能保证系统将处理这个请求。如果外部存储器不可用或已满,应用将会被安装到内部存储器。一旦安装,用户可以通过系统设置将应用安装位置在内部存储器与外部存储器之间切换。 29 | 30 | [App Install Location](https://developer.android.com/guide/topics/data/install-location.html) 31 | 32 | ### 在以下标签中使用 33 | 34 | 无 35 | 36 | ### 必选属性 37 | 38 | - application 39 | 40 | ### 可选属性 41 | 42 | - compatible-screens 43 | - instrumentation 44 | - permission 45 | - permission-group 46 | - permission-tree 47 | - supports-gl-texture 48 | - supports-screens 49 | - uses-configuration 50 | - uses-feature 51 | - uses-permission 52 | - uses-permission-sdk-23 53 | - uses-sdk 54 | 55 | ## intent-filter 56 | 57 | ### 语法 58 | 59 | ```xml 60 | //赋予父组件的优先级关于操作被filter描述的intent类型 64 | //为intent filter添加Action 65 | //为intent filter添加data说明 66 | //为intent filter添加一个category名称 67 | 68 | ``` 69 | 70 | ### 在以下标签中使用 71 | 72 | - activity 73 | - activity-alias 74 | - service 75 | - receiver 76 | 77 | ### 必须包含属性 78 | 79 | - action 80 | 81 | ### 可选属性 82 | 83 | - category 84 | - data 85 | 86 | ## activity-alias 87 | 88 | ### 语法 89 | 90 | ```xml 91 | //通过别名可以被激活的Activity的名称 98 | . . . 99 | 100 | ``` 101 | 102 | ### 在以下标签中包含 103 | 104 | - application 105 | 106 | ### 可选属性 107 | 108 | - intent-filter 109 | - meta-data 110 | 111 | ## application 112 | 113 | ### 语法 114 | 115 | ```xml 116 | 147 | . . . 148 | 149 | ``` 150 | 151 | ### 在以下标签中使用 152 | 153 | - manifest 154 | 155 | ### 可选属性 156 | 157 | - activity 158 | - activity-alias 159 | - meta-data 160 | - service 161 | - receiver 162 | - provider 163 | - uses-library 164 | 165 | ## activity 166 | 167 | ### 语法 168 | 169 | ```xml 170 | // 220 | . . . 221 | 222 | ``` 223 | 224 | **说明**: 225 | 226 | - **stateUnspecified** 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。 227 | - **stateUnchanged** 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。 228 | - **stateHidden** 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。 229 | - **stateAlwaysHidden** 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。 230 | - **stateVisible** 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。 231 | - **stateAlwaysVisible** 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。 232 | - **adjustUnspecified** 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。 233 | - **adjustResize** 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。 234 | - **adjustPan** 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。 235 | 236 | 237 | 238 | ### 在以下标签中使用 239 | 240 | - application 241 | 242 | ### 可选属性 243 | 244 | - intent-filter 245 | - meta-data 246 | 247 | ## meta-data 248 | 249 | ### 语法 250 | 251 | ```xml 252 | 255 | ``` 256 | 257 | ### 在以下标签中使用 258 | 259 | - activity 260 | - activity-alias 261 | - application 262 | - provider 263 | - receiver 264 | 265 | ### 不可使用标签 266 | 267 | - service 268 | 269 | ## service 270 | 271 | ### 语法 272 | 273 | ```xml 274 | 282 | . . . 283 | 284 | ``` 285 | 286 | ### 在以下标签中使用 287 | 288 | - application 289 | 290 | ### 可选属性 291 | 292 | - intent-filter 293 | - meta-data 294 | 295 | ## receiver 296 | 297 | ### 语法 298 | 299 | ```xml 300 | 307 | . . . 308 | 309 | ``` 310 | 311 | ### 在以下标签中使用 312 | 313 | - application 314 | 315 | ### 可选属性 316 | 317 | - intent-filter 318 | - meta-data 319 | 320 | ## provider 321 | 322 | ### 语法 323 | 324 | ```xml 325 | 339 | . . . 340 | 341 | ``` 342 | 343 | ### 在以下标签中使用 344 | 345 | - application 346 | 347 | ### 可选属性 348 | 349 | - meta-data 350 | - grant-uri-permission 351 | - path-permission 352 | 353 | ## action 354 | 355 | ### 语法 356 | 357 | ```xml 358 | 359 | ``` 360 | 361 | ### 在以下标签中使用 362 | 363 | - intent-filter 364 | 365 | ## category 366 | 367 | ### 语法 368 | 369 | ```xml 370 | 371 | ``` 372 | ### 在以下标签中使用 373 | 374 | - intent-filter 375 | 376 | ## compatible-screens 377 | 378 | ### 语法 379 | 380 | ```xml 381 | 382 | 385 | ... 386 | 387 | ``` 388 | 389 | ### 在以下标签中使用 390 | 391 | - manifest 392 | 393 | ## data 394 | 395 | ### 语法 396 | 397 | ```xml 398 | 405 | ``` 406 | 407 | ### 在以下标签中使用 408 | 409 | - intent-filter 410 | 411 | ## grant-uri-permission 412 | 413 | ### 语法 414 | 415 | ```xml 416 | 419 | ``` 420 | 421 | ### 在以下标签中使用 422 | 423 | - provider 424 | 425 | ## instrumentation 426 | 427 | ### 语法 428 | 429 | ```xml 430 | 436 | ``` 437 | 438 | ### 在以下标签中使用 439 | 440 | - manifest 441 | 442 | ## path-permission 443 | 444 | ### 语法 445 | 446 | ```xml 447 | 453 | ``` 454 | 455 | ### 在以下标签中使用 456 | 457 | - provider 458 | 459 | ## permission 460 | 461 | ### 语法 462 | 463 | ```xml 464 | 471 | ``` 472 | 473 | ### 在以下标签中使用 474 | 475 | - manifest 476 | 477 | ## permission-group 478 | 479 | ### 语法 480 | 481 | ```xml 482 | 486 | ``` 487 | 488 | ### 在以下标签中使用 489 | 490 | - manifest 491 | 492 | ## permission-tree 493 | 494 | ### 语法 495 | 496 | ```xml 497 | 500 | ``` 501 | 502 | ### 在以下标签中使用 503 | 504 | - manifest 505 | 506 | ## supports-gl-texture 507 | 508 | ### 语法 509 | 510 | ```xml 511 | 513 | ``` 514 | 515 | ### 在以下标签中使用 516 | 517 | - manifest 518 | 519 | ## supports-screens 520 | 521 | ### 语法 522 | 523 | ```xml 524 | 533 | ``` 534 | 535 | ### 在以下标签中使用 536 | 537 | - manifest 538 | 539 | ## uses-configuration 540 | 541 | ### 语法 542 | 543 | ```xml 544 | 550 | ``` 551 | 552 | ### 在以下标签中使用 553 | 554 | - manifest 555 | 556 | ## uses-feature 557 | 558 | ### 语法 559 | 560 | ```xml 561 | 565 | ``` 566 | 567 | ### 在以下标签中使用 568 | 569 | - manifest 570 | 571 | ## uses-library 572 | 573 | ### 语法 574 | 575 | ```xml 576 | 579 | ``` 580 | 581 | ### 在以下标签中使用 582 | 583 | - application 584 | 585 | ## uses-permission 586 | 587 | ### 语法 588 | 589 | ```xml 590 | 592 | ``` 593 | 594 | ### 在以下标签中使用 595 | 596 | - manifest 597 | 598 | ## uses-permission-sdk-23 599 | 600 | ### 语法 601 | 602 | ```xml 603 | 605 | ``` 606 | 607 | ### 在以下标签中使用 608 | 609 | - manifest 610 | 611 | ## uses-sdk 612 | 613 | ### 语法 614 | 615 | ```xml 616 | 619 | ``` 620 | 621 | ### 在以下标签中使用 622 | 623 | - manifest 624 | 625 | 626 | 627 | 628 | -------------------------------------------------------------------------------- /Android高级技能.md: -------------------------------------------------------------------------------- 1 | Android高级技能列表 2 | 3 | - [Android高工必备技能!](http://www.jianshu.com/p/d791bbede02c) 4 | 5 | 6 | -------------------------------------------------------------------------------- /Http研究.md: -------------------------------------------------------------------------------- 1 | Http研究 2 | 3 | -------------------------------------------------------------------------------- /MarkDown.md: -------------------------------------------------------------------------------- 1 | README 2 | =========================== 3 | 该文件用来测试和展示书写README的各种markdown语法。GitHub的markdown语法在标准的markdown语法基础上做了扩充,称之为`GitHub Flavored Markdown`。简称`GFM`,GFM在GitHub上有广泛应用,除了README文件外,issues和wiki均支持markdown语法。 4 | 5 | **** 6 | ###            Author:果冻虾仁 7 | ###          E-mail:Jelly.K.Wang@qq.com 8 | 9 | =========================== 10 | 11 | 12 | 13 | ##目录 14 | * [横线](#横线) 15 | * [标题](#标题) 16 | * [文本](#文本) 17 | * 普通文本 18 | * 单行文本 19 | * 多行文本 20 | * 文字高亮 21 | * 换行 22 | * 斜体 23 | * 粗体 24 | * 删除线 25 | * [图片](#图片) 26 | * 来源于网络的图片 27 | * GitHub仓库中的图片 28 | * [链接](#链接) 29 | * 文字超链接 30 | * 链接外部URL 31 | * 链接本仓库里的URL 32 | * 锚点 33 | * [图片链接](#图片链接) 34 | * [列表](#列表) 35 | * 无序列表 36 | * 有序列表 37 | * 复选框列表 38 | * [块引用](#块引用) 39 | * [代码高亮](#代码高亮) 40 | * [表格](#表格) 41 | * [表情](#表情) 42 | 43 | 横线 44 | ----------- 45 | ***、---、___可以显示横线效果 46 | 47 | *** 48 | --- 49 | ___ 50 | 51 | 52 | 53 | 标题 54 | ------ 55 | 56 | #一级标题 57 | ##二级标题 58 | ###三级标题 59 | ####四级标题 60 | #####五级标题 61 | ######六级标题 62 | 63 | 64 | 文本 65 | ------ 66 | ###普通文本 67 | 这是一段普通的文本 68 | ###单行文本 69 | 70 | Hello,大家好,我是果冻虾仁。 71 | 72 | 在一行开头加入1个Tab或者4个空格。 73 | ###文本块 74 | ####语法1 75 | 在连续几行的文本开头加入1个Tab或者4个空格。 76 | 77 | 欢迎到访 78 | 很高兴见到您 79 | 祝您,早上好,中午好,下午好,晚安 80 | 81 | ####语法2 82 | 使用一对各三个的反引号: 83 | ``` 84 | 欢迎到访 85 | 我是C++码农 86 | 你可以在知乎、CSDN、简书搜索【果冻虾仁】找到我 87 | ``` 88 | 该语法也可以实现代码高亮,见[代码高亮](#代码高亮) 89 | ###文字高亮 90 | 文字高亮功能能使行内部分文字高亮,使用一对反引号。 91 | 语法: 92 | ``` 93 | `linux` `网络编程` `socket` `epoll` 94 | ``` 95 | 效果:`linux` `网络编程` `socket` `epoll` 96 | 97 | 也适合做一篇文章的tag 98 | ####换行 99 | 直接回车不能换行, 100 | 可以在上一行文本后面补两个空格, 101 | 这样下一行的文本就换行了。 102 | 103 | 或者就是在两行文本直接加一个空行。 104 | 105 | 也能实现换行效果,不过这个行间距有点大。 106 | ####斜体、粗体、删除线 107 | |语法|效果| 108 | |----|----- 109 | |`*斜体1*`|*斜体1* 110 | |`_斜体2_`|_斜体2_ 111 | |`**粗体1**`|**粗体1** 112 | |`__粗体2__`|__粗体2__ 113 | |`这是一个 ~~删除线~~`|这是一个 ~~删除线~~ 114 | |`***斜粗体1***`|***斜粗体1*** 115 | |`___斜粗体2___`|___斜粗体2___ 116 | |`***~~斜粗体删除线1~~***`|***~~斜粗体删除线1~~*** 117 | |`~~***斜粗体删除线2***~~`|~~***斜粗体删除线2***~~ 118 | 119 | 斜体、粗体、删除线可混合使用 120 | 121 | 图片 122 | ------ 123 | 基本格式: 124 | ``` 125 | ![alt](URL title) 126 | ``` 127 | alt和title即对应HTML中的alt和title属性(都可省略): 128 | - alt表示图片显示失败时的替换文本 129 | - title表示鼠标悬停在图片时的显示文本(注意这里要加引号) 130 | 131 | URL即图片的url地址,如果引用本仓库中的图片,直接使用**相对路径**就可了,如果引用其他github仓库中的图片要注意格式,即:`仓库地址/raw/分支名/图片路径`,如: 132 | ``` 133 | https://github.com/guodongxiaren/ImageCache/raw/master/Logo/foryou.gif 134 | ``` 135 | 136 | |#|语法|效果| 137 | |---|---|---- 138 | |1|`![baidu](http://www.baidu.com/img/bdlogo.gif "百度logo")`|![baidu](http://www.baidu.com/img/bdlogo.gif "百度logo") 139 | |2|`![][foryou]`|![][foryou] 140 | 141 | 注意例2的写法使用了**URL标识符**的形式,在[链接](#链接)一节有介绍。 142 | >在文末有foryou的定义: 143 | ``` 144 | [foryou]:https://github.com/guodongxiaren/ImageCache/raw/master/Logo/foryou.gif 145 | ``` 146 | 147 | 链接 148 | ------ 149 | ###链接外部URL 150 | |#|语法|效果| 151 | |---|----|----- 152 | |1|`[我的博客](http://blog.csdn.net/guodongxiaren "悬停显示")`|[我的博客](http://blog.csdn.net/guodongxiaren "悬停显示") 153 | |2|`[我的知乎][zhihu] `|[我的知乎][zhihu] 154 | |2|`[zhihu]:https://www.zhihu.com/people/jellywong "我的知乎,欢迎关注"`| 155 | 156 | 语法2由两部分组成: 157 | - 第一部分使用两个中括号,[ ]里的标识符(本例中zhihu),可以是数字,字母等的组合,标识符上下对应就行了(**姑且称之为URL标识符**) 158 | - 第二部分标记实际URL。 159 | 160 | >使用URL标识符能达到复用的目的,一般把全文所有的URL标识符统一放在文章末尾,这样看起来比较干净。 161 | >>URL标识符是我起的名字,不知道是否准确。囧。。 162 | 163 | ###链接本仓库里的URL 164 | |语法|效果| 165 | |----|----- 166 | |`[我的简介]|(/example/profile.md)`|[我的简介](/example/profile.md) 167 | |`[Book]|(./Book)`|[Book](/Book) 168 | 169 | ###图片链接 170 | 给图片加链接的本质是混合图片显示语法和普通的链接语法。普通的链接中[ ]内部是链接要显示的文本,而图片链接[ ]里面则是要显示的图片。 171 | 直接混合两种语法当然可以,但是十分啰嗦,为此我们可以使用URL标识符的形式。 172 | 173 | |#|语法|效果| 174 | |---|----|:---: 175 | |1|`[![weibo-logo]](http://weibo.com/linpiaochen)`|[![weibo-logo]](http://weibo.com/linpiaochen) 176 | |2|`[![](/img/zhihu.png "我的知乎,欢迎关注")][zhihu]`|[![](/img/zhihu.png "我的知乎,欢迎关注")][zhihu]| 177 | |3|`[![csdn-logo]][csdn]`|[![csdn-logo]][csdn] 178 | 179 | 因为图片本身和链接本身都支持URL标识符的形式,所以图片链接也可以很简洁(见例3)。 180 | 注意,此时鼠标悬停时显示的文字是图片的title,而非链接本身的title了。 181 | >本文URL标识符都放置于文末 182 | 183 | ###锚点 184 | 其实呢,每一个标题都是一个锚点,和HTML的锚点(`#`)类似,比如我们 185 | 186 | |语法|效果| 187 | |---|--- 188 | |`[回到顶部](#readme)`|[回到顶部](#readme) 189 | 190 | 不过要注意,标题中的英文字母都被转化为**小写字母**了。 191 | >以前GitHub对中文支持的不好,所以中文标题不能正确识别为锚点,但是现在已经没问题啦! 192 | 193 | 194 | ##列表 195 | ###无序列表 196 | * 昵称:果冻虾仁 197 | - 别名:隔壁老王 198 | * 英文名:Jelly 199 | 200 | ###多级无序列表 201 | * 编程语言 202 | * 脚本语言 203 | * Python 204 | 205 | ###有序列表 206 | ####一般效果 207 | 就是在数字后面加一个点,再加一个空格。不过看起来起来可能不够明显。 208 | 面向对象的三个基本特征: 209 | 210 | 1. 封装 211 | 2. 继承 212 | 3. 多态 213 | 214 | ####有序列表自动排序 215 | 也可以在第一行指定`1. `,而接下来的几行用星号`*`(或者继续用数字1. )就可以了,它会自动显示成2、3、4……。 216 | 面向对象的七大原则: 217 | 218 | 1. 开闭原则 219 | * 里氏转换原则 220 | * 依赖倒转原则 221 | * 接口隔离原则 222 | * 组合/聚合复用原则 223 | * “迪米特”法则 224 | * 单一职责原则 225 | 226 | ####多级有序列表 227 | 和无序列表一样,有序列表也有多级结构: 228 | 229 | 1. 这是一级的有序列表,数字1还是1 230 | 1. 这是二级的有序列表,阿拉伯数字在显示的时候变成了罗马数字 231 | 1. 这是三级的有序列表,数字在显示的时候变成了英文字母 232 | 1. 四级的有序列表显示效果,就不再变化了,依旧是英文字母 233 | 234 | ### 复选框列表 235 | - [x] 需求分析 236 | - [x] 系统设计 237 | - [x] 详细设计 238 | - [ ] 编码 239 | - [ ] 测试 240 | - [ ] 交付 241 | 242 | 您可以使用这个功能来标注某个项目各项任务的完成情况。 243 | >Tip: 244 | >>在GitHub的**issue**中使用该语法是可以实时点击复选框来勾选或解除勾选的,而无需修改issue原文。 245 | 246 | ##块引用 247 | 248 | ###常用于引用文本 249 | ####文本摘自《深入理解计算机系统》P27 250 |  令人吃惊的是,在哪种字节顺序是合适的这个问题上,人们表现得非常情绪化。实际上术语“little endian”(小端)和“big endian”(大端)出自Jonathan Swift的《格利佛游记》一书,其中交战的两个派别无法就应该从哪一端打开一个半熟的鸡蛋达成一致。因此,争论沦为关于社会政治的争论。只要选择了一种规则并且始终如一的坚持,其实对于哪种字节排序的选择都是任意的。 251 | >**“端”(endian)的起源** 252 | 以下是Jonathan Swift在1726年关于大小端之争历史的描述: 253 | “……下面我要告诉你的是,Lilliput和Blefuscu这两大强国在过去36个月里一直在苦战。战争开始是由于以下的原因:我们大家都认为,吃鸡蛋前,原始的方法是打破鸡蛋较大的一端,可是当今的皇帝的祖父小时候吃鸡蛋,一次按古法打鸡蛋时碰巧将一个手指弄破了,因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破较小的一端,违令者重罚。” 254 | 255 | ###块引用有多级结构 256 | >数据结构 257 | >>树 258 | >>>二叉树 259 | >>>>平衡二叉树 260 | >>>>>满二叉树 261 | 262 | 代码高亮 263 | ---------- 264 | 在三个反引号后面加上编程语言的名字,另起一行开始写代码,最后一行再加上三个反引号。 265 | ```Java 266 | public static void main(String[]args){} //Java 267 | ``` 268 | ```c 269 | int main(int argc, char *argv[]) //C 270 | ``` 271 | ```Bash 272 | echo "hello GitHub" #Bash 273 | ``` 274 | ```javascript 275 | document.getElementById("myH1").innerHTML="Welcome to my Homepage"; //javascipt 276 | ``` 277 | ```cpp 278 | string &operator+(const string& A,const string& B) //cpp 279 | ``` 280 | 表格 281 | -------- 282 | 283 | 表头1 | 表头2 284 | --------- | -------- 285 | 表格单元 | 表格单元 286 | 表格单元 | 表格单元 287 | 288 | | 表头1 | 表头2| 289 | | ---------- | -----------| 290 | | 表格单元 | 表格单元 | 291 | | 表格单元 | 表格单元 | 292 | 293 | ###对齐 294 | 表格可以指定对齐方式 295 | 296 | | 左对齐 | 居中 | 右对齐 | 297 | | :------------ |:---------------:| -----:| 298 | | col 3 is | some wordy text | $1600 | 299 | | col 2 is | centered | $12 | 300 | | zebra stripes | are neat | $1 | 301 | 302 | ###混合其他语法 303 | 表格单元中的内容可以和其他大多数GFM语法配合使用,如: 304 | ####使用普通文本的删除线,斜体等效果 305 | 306 | | 名字 | 描述 | 307 | | ------------- | ----------- | 308 | | Help | ~~Display the~~ help window.| 309 | | Close | _Closes_ a window | 310 | ####表格中嵌入图片(链接) 311 | 其实前面介绍图片显示、图片链接的时候为了清晰就是放在在表格中显示的。 312 | 313 | | 图片 | 描述 | 314 | | ---- | ---- | 315 | |![baidu][baidu-logo] | 百度 316 | 317 | 表情 318 | ---------- 319 | Github的Markdown语法支持添加emoji表情,输入不同的符号码(两个冒号包围的字符)可以显示出不同的表情。 320 | 321 | 比如`:blush:`,可以显示:blush:。 322 | 323 | 具体每一个表情的符号码,可以查询GitHub的官方网页[http://www.emoji-cheat-sheet.com](http://www.emoji-cheat-sheet.com)。 324 | 325 | 但是这个网页每次都打开**奇慢**。。所以我整理到了本repo中,大家可以直接在此查看[emoji](./emoji.md)。 326 | 327 | -------------------------------- 328 | [csdn]:http://blog.csdn.net/guodongxiaren "我的博客" 329 | [zhihu]:https://www.zhihu.com/people/jellywong "我的知乎,欢迎关注" 330 | [weibo]:http://weibo.com/linpiaochen 331 | [baidu-logo]:http://www.baidu.com/img/bdlogo.gif "百度logo" 332 | [weibo-logo]:/img/weibo.png "点击图片进入我的微博" 333 | [csdn-logo]:/img/csdn.png "我的CSDN博客" 334 | [foryou]:https://github.com/guodongxiaren/ImageCache/raw/master/Logo/foryou.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Android进阶技能点 2 | 3 | ## 1.RecyclerView 4 | 5 | 6 | * [深入浅出RecyclerView(张涛)](http://kymjs.com/code/2016/07/10/01) 7 | 8 | 介绍RecyclerView的基本用法、原理分析及其源码解析。 9 | 10 | * [RecyclerView的通用适配器,和滚动时不加载图片的封装(张涛)](http://kymjs.com/code/2015/10/11/01) 11 | 12 | 介绍RecyclerView的BaseAdapter、BaseViewHolder的封装,及滑动图片不加载。 13 | 14 | * [那些酷炫的RecyclerView开源库整理](http://android.jobbole.com/83410/) 15 | 16 | 最近在研究RecyclerView ,还是习惯整理一下开源项目放到github上 ,欢迎提交更新 ,fork,star。 排序纯属个人直觉。 17 | 18 | * [Android LRecyclerView 实现下拉刷新,滑动到底部自动加载更多](http://android.jobbole.com/84060/) 19 | 20 | LRecyclerView是支持addHeaderView、 addFooterView、下拉刷新、分页加载数据的RecyclerView。 21 | 22 | 它对 RecyclerView 控件进行了拓展,给RecyclerView增加HeaderView、FooterView,并且不需要对你的Adapter做任何修改。 23 | 24 | * [十秒钟搞定RecyclerView数据绑定](http://gold.xitu.io/entry/575beb7e5bbb500053dbd451) 25 | 26 | 在上一个项目里有很多很多很多很多的RecyclerView,然后我需要写很多很多很多很多的Adapter和Viewholder——多倒没问题,但是里面有很多重复的代码这就不能忍了!每一个Adapter和ViewHolder其实做的事情非常的像:视图绑定,数据绑定,点击事件分发。还有啥?既然它们做的事情都一样,为啥我们还要傻傻的继续写着重复的代码? 27 | 28 | - [XRecyclerView](https://github.com/jianghejie/XRecyclerView) 29 | 30 | a RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView 31 | 32 | ## 2.Android主题切换 33 | 34 | * [Android夜间模式实现](http://kymjs.com/code/2015/05/26/01) 35 | 36 | 介绍实现主题切换的简单实现思路,通过一个Demo进行讲解。 37 | 38 | * [Android主题换肤的开源库ThemeSkinning](http://android.jobbole.com/83662/) 39 | 40 | 本开源库是基于我之前的一个博客 Android主题换肤 无缝切换 不知道原理的可以去这篇博客看看。出于易于集成的目的,我将其抽取出来,作为一个模块。提供简洁的api,方便使用。 41 | 42 | * [Android主题换肤无缝切换](http://android.jobbole.com/82932/) 43 | 44 | 今天再给大家带来一篇干货。 Android的主题换肤 ,可插件化提供皮肤包,无需Activity的重启直接实现无缝切换,可高仿网易云音乐的主题换肤。 45 | 46 | * [Android 主题动态切换框架:Prism](https://blog.leancloud.cn/3612/) 47 | 48 | ## 3.实现Android网络请求框架 49 | 50 | * [打造属于自己的Android网络库](http://www.jianshu.com/p/16736df632a1) 51 | 52 | Android学习中网络是必不可少的一部分,甚至是重中之重。开发中可能我们会使用一些很成熟优秀的网络框架,如:OkHttp,Retrofit,Volley等。图片库:Fresco,Glide,Picasso,ImageLoader等。为了深入的学习一起来打造一个属于自己的网络库吧。 53 | 54 | * [Android网络操作和优化相关](http://android.jobbole.com/83394/) 55 | 56 | Android程序最重要的模块就是网络部分,如何从网络上下载数据,如何将处理过的数据上传至网络,往往是android程序的关键环节。前几天偶一朋友遇到这么一个问题:如何使用volley实现文件上传。 57 | 58 | 59 | ## 4.实现Android图片加载框架 60 | 61 | * [Google I/O 2013:Volley加载图片添加缓存处理](http://android.jobbole.com/81287/) 62 | 63 | Google I/O 2013已经结束,它让我们对Android将来的发展有了更大的期待。今年I/O大会上展示的令人激动的创新之一是名为Volley库。Volley是一个处理并缓存网络请求的库,它把开发者从不同的应用中编写相同代码的泥潭中拯救出来。编写相同代码从来都不是有趣的,还会增加开发者的错误几率。正式考虑了这一点,Google创造了Volley。 64 | 65 | * [网络图片加载的封装【从零开始搭建android框架系列(4)】](http://www.jianshu.com/p/e26130a93289) 66 | 67 | 68 | ## 5.Android代码混淆 69 | 70 | * [读懂 Android 中的代码混淆](http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/) 71 | 72 | 介绍一些混淆的知识和注意事项 73 | 74 | * [Android studio使用心得(五)---代码混淆和破解apk](http://my.oschina.net/aibenben/blog/371889) 75 | 76 | * [ProGuard详解](http://seniorzhai.github.io/2016/04/11/ProGuard%E8%AF%A6%E8%A7%A3/) 77 | 78 | * [Android进阶之ProGuard代码混淆](http://hanhailong.com/2015/12/28/Android%E8%BF%9B%E9%98%B6%E4%B9%8BProGuard%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/) 79 | 80 | * [美团Android资源混淆保护实践](http://tech.meituan.com/mt-android-resource-obfuscation.html) 81 | 82 | - [android-proguard-snippets](https://github.com/krschultz/android-proguard-snippets) 83 | 84 | Proguard configurations for common Android libraries http://www.kevinrschultz.com/blog/2014/02/15/proguard-with-gradle/ 85 | 86 | ## 6.Android内测泄漏检测 87 | 88 | * [用LeakCanary检测内存泄漏](https://realm.io/cn/news/droidcon-ricau-memory-leaks-leakcanary/) 89 | 90 | LeakCanary是一个帮助检测和修复内存泄漏的工具。 91 | 92 | ## 7.Realm 93 | 94 | * [Realm快速入门](https://realm.io/cn/docs/java/latest/#section) 95 | 96 | 更好的移动端数据库意味着更好的移动端应用。Realm 快速、易用并且免费,深受开发者和亿万用户喜爱。 97 | 98 | ## 8.RxJava和RxAndroid 99 | 100 | * [Airbnb:我们的安卓客户端是如何使用 RxJava 的(Felipe Lima)](https://realm.io/cn/news/kau-felipe-lima-adopting-rxjava-airbnb-android/) 101 | 102 | Reactive编程和RxJava是最近常常引起强烈争论的话题,争论过程中问题很多,不确定性也很多。在Airbnb的客户端里,我们是如何采纳这些范式和技术,包括动力,实现的困难,和这一路走来的经验教训。我们还会看些产品的代码,比较 imperative编程和reactive编程的优劣,然后分别讨论它们的优势和缺陷。 103 | 104 | * [带你学开源项目:RxLifecycle - 当Activity被destory时自动暂停网络请求](http://android.jobbole.com/83847/) 105 | 106 | 本文分析思路不是从源码里抽代码出来一步步跟踪,而是提出问题,一步步思考解决方法,从而学习到开源项目的思维精华,而不仅仅是了解该项目的具体实现。笔者认为这种方式更有利于读者提高自身思维方式和技术能力。 107 | 108 | * [RxAndroid+RxLifecycle+MVP实现异步请求,ButterKnife更新ui](http://www.infocool.net/kb/Android/201607/170013.html) 109 | 110 | 各位好,今天的内容应该算是一个小框架了,使用Rx系列配合MVP实现异步请求,使用ButterKnife注入框架更新ui。 今天我主要讲的,今天的内容应该算是一个小框架了,使用Rx系列配合MVP实现异步请求,使用ButterKnife注入框架更新ui。今天我主要讲的是 RxAndroid+RxLifecycle+MVP+ButterKnife整体结合的小框架。 111 | 112 | * [RxJava2 浅析](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0907/6604.html) 113 | 114 | 在RxJava1.x中,最熟悉的莫过于Observable这个类了,笔者刚使用RxJava2.x时,创建一个Observable后,顿时是懵逼的。因为我们熟悉的Subscriber居然没影了,取而代之的是ObservableEmitter,俗称发射器。此外,由于没有了Subscriber的踪影,我们创建观察者时需使用Observer。而Observer也不是我们熟悉的那个Observer,其回调的Disposable参数更是让人摸不到头脑。 115 | 116 | * [RxJava 源码解读](http://blog.csdn.net/maplejaw_/article/details/52381395) 117 | 118 | RxJava 是一个基于Java的响应式扩展实现: 即一个通过使用可观察序列来编写异步和基于事件的程序库。 它扩展了观察者模式以支持数据/事件序列,您可以根据声明好的规则通过操作符将序列组合在一起,而不用去担心低级别的线程,同步,线程安全和并发数据结构的各种问题。 119 | 120 | 121 | ## 9.Android中的HTTPS 122 | 123 | * [HTTPS 理论基础及其在 Android 中的最佳实践](http://android.jobbole.com/83787/) 124 | 125 | 我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。 126 | 127 | 128 | ## 10.Android自定义view 129 | 130 | * [Android自定义view详解](http://android.jobbole.com/83835/) 131 | 132 | 对于我这样一个Android初级开发者来说,自定义View一直是一个遥不可及的东西,每次看到别人做的特别漂亮的控件,自己心里那个痒痒啊,可是又生性懒惰,自己不肯努力去看书,只能望而兴叹,每次做需求用到自定义控件,就直接去Github上找,找到合适的就用,找不到合适的,凑合也用,反正从来没想过要自己来做这样的东西,可是毕业以后到了新公司,为了自己的荣誉,这次不得不硬着头皮自己来了,一个月的紧张开发过后,回头再看,自定义控件也无非那么回事,只要记得几个要领,几乎是手到擒来 133 | 134 | - [Android 自定义View之边缘凹凸的优惠券效果](http://www.open-open.com/lib/view/open1475139223472.html) 135 | 136 | 本篇文章讲的是自定义View之边缘凹凸的优惠券效果,之前有见过很多优惠券的效果都是使用了边缘凹凸的样式。和往常一样,主要总结一下在自定义View的开发过程中需要注意的一些地方。 137 | 138 | - [贝塞尔曲线之购物车动画效果](http://www.open-open.com/lib/view/open1475136655228.html) 139 | 140 | 141 | 142 | ## 11.Android事件分发 143 | 144 | * [Android 中的事件分发和处理](http://android.jobbole.com/83826/) 145 | 146 | 上次跟大家分享了一下自定义View的一下要点,这次跟大家聊一下View的事件分发及处理,为什么主题都是View,因为作为一名初级应用层Android工程师,跟我打交道最多的莫过于各种各样的View,只有详细了解他们各自的习性,才能更好地跟他们沟通交流,做出自己想要的效果。 147 | 148 | ## 12.Android插件化开发 149 | 150 | * [Android插件化原理解析(1):概要](http://android.jobbole.com/82746/) 151 | 152 | 2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈: 153 | 154 | 从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。 155 | 156 | 在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋;各个团队维护着同一个App的不同模块,如果每个模块升级新功能都需要对整个app进行升级,那么发布流程不仅复杂而且效率低下;在讲究小步快跑和持续迭代的移动互联网必将遭到淘汰。 157 | 158 | * [Android插件化原理解析(2):Hook机制之动态代理](http://android.jobbole.com/83143/) 159 | 160 | 使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率;同样,插件框架也广泛使用了代理机制来增强系统API从而达到插件化的目的。本文将带你了解基于动态代理的Hook机制。 161 | 162 | * [Android插件化原理解析(3):Hook机制之Binder Hook](http://android.jobbole.com/83149/) 163 | 164 | Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等;这些广泛存在系统服务给应用程序提供了诸如任务管理,音频,视频等异常强大的功能。 165 | 166 | 插件框架作为各个插件的管理者,为了使得插件能够无缝地使用这些系统服务,自然会对这些系统服务做出一定的改造(Hook),使得插件的开发和使用更加方便,从而大大降低插件的开发和维护成本。比如,Hook住ActivityManagerService可以让插件无缝地使用startActivity方法而不是使用特定的方式(比如that语法)来启动插件或者主程序的任意界面。 167 | 168 | * [Android插件化原理解析(4):Hook机制之AMS&PMS](http://android.jobbole.com/83157/) 169 | 170 | 在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook;插件框架通过AOP实现了插件使用和开发的透明性。在讲述DroidPlugin如何实现四大组件的插件化之前,有必要说明一下它对ActivityManagerServiche以及PackageManagerService的Hook方式(以下简称AMS,PMS)。 171 | 172 | * [Android插件化原理解析(5):Activity生命周期管理](http://android.jobbole.com/83168/) 173 | 174 | 之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在Android系统上运行起来? 175 | 176 | * [Android插件化原理解析(6):插件加载机制](http://android.jobbole.com/83175/) 177 | 178 | 上文 Activity生命周期管理 中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务;通过Hook AMS和拦截ActivityThread中H类对于组件调度我们成功地绕过了AndroidMAnifest.xml的限制。 179 | 180 | * [Android插件化原理解析(7):广播的管理](http://android.jobbole.com/82776/) 181 | 182 | 在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力;那么Android系统的其他组件,比如BroadcastReceiver,Service还有ContentProvider,它们又该如何处理呢? 183 | 184 | * [Android插件化原理解析(8):ContentProvider的插件化](http://android.jobbole.com/83817/) 185 | 186 | 目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案;那么对于ContentProvider,它又有什么特点?应该如何实现它的插件化? 187 | 188 | 189 | ## 13.Android Dex分包 190 | 191 | * [Android dex分包方案](http://android.jobbole.com/82328/) 192 | 193 | 当一个app的功能越来越复杂,代码量越来越多,也许有一天便会突然遇到下列现象: 194 | 195 | (1)生成的apk在2.3以前的机器无法安装,提示INSTALL_FAILED_DEXOPT 196 | 197 | (2)方法数量过多,编译时出错,提示: 198 | 199 | Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536 200 | 201 | 出现这种问题的原因是: 202 | 203 | (1)Android2.3及以前版本用来执行dexopt(用于优化dex文件)的内存只分配了5M 204 | 205 | (2)一个dex文件最多只支持65536个方法。 206 | 207 | * [美团Android DEX自动拆包及动态加载简介](http://android.jobbole.com/81218/) 208 | 209 | 作为一个android开发者,在开发应用时,随着业务规模发展到一定程度,不断地加入新功能、添加新的类库,代码在急剧的膨胀,相应的apk包的大小也急剧增加, 那么终有一天,你会不幸遇到这个错误: 210 | 211 | (1)生成的apk在android 2.3或之前的机器上无法安装,提示INSTALL_FAILED_DEXOPT 212 | 213 | (2)方法数量过多,编译时出错,提示: 214 | 215 | Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536 216 | 217 | 218 | ## 14.Apk瘦身 219 | 220 | * [Android APK瘦身实践](http://android.jobbole.com/82401/) 221 | 222 | * [Android着色器Tint研究](http://android.jobbole.com/83875/) 223 | 224 | Tint 这个东西 主要用来减少apk体积的,比如说我现在有一个textview,他的背景图 有两种,一种是当获得焦点时显示的a图,另一种是 失去焦点时显示的b图。 225 | 226 | 227 | 228 | ## 15.Android线程池 229 | 230 | * [Android 性能优化之使用线程池处理异步任务](http://android.jobbole.com/82092/#comment-91762) 231 | 232 | 233 | ## 16.RecyclerView优化 234 | 235 | * [滑动时图片优化方案描述](http://www.2cto.com/kf/201509/443534.html) 236 | 237 | 控制线程数量 + 数据分页加载 238 | 239 | 我们在使用滑动控件呈现图片数据时,显然都会在getView方法里创建新的线程去异步加载图片,不可能有一百条或上千条数据一口气全部塞过来吧(当然你要这么干也是可以的),那么根据项目需求必然会进行分页加载,咱一页显示的item条数也别太夸张就好。而且,当我们点击屏幕快速向下滑动时,每个Item都会调用getView一次,必然会创建出很多线程去加载图片的URL资源,控制好线程的数量,加个线程池就非常有必要了。为了避免OOM导致FC,注意图片需要缓存,因为从内存中读取图片资源是非常快的。 240 | 241 | 重写onScrollStateChanged方法 242 | 243 | 这种方案用的也很普遍,相信只要细心观察,就会发现类似微博、Facebook、或者一些图片壁纸类的APP,在滑动时未加载的图片是不会立刻加载呈现的,只有当滑动停止后才会加载,这里需要注意一点的是,只加载当前屏幕内的图片。这么一说可能有童鞋就明白了。我们可以通过继承RecyclerView去自定义一个滑动控件,通过继承OnScrollListener后重写其 onScrolled方法 和 onScrollStateChanged 等方法来做相应处理。 244 | 245 | * [值得收藏的 ViewHolder 工具类实现](http://android.jobbole.com/83917/) 246 | 247 | 在开发APP的过程中,攻城狮少不了要跟ListView、GridView这些组件眉来眼去,暗送几波秋波。自然原生态美人BaseAdapter更是程序员的最爱,有了它,我们想怎么干就能怎么干,嘿嘿,你懂的O(∩_∩)O哈哈~ 248 | 249 | 但是,每次写一个BaseAdapter,我们都很自觉的给他写一个ViewHolder,一两个还好,万一应用程序中有数不清的ListView,呵呵~你妹!千篇一律,看得都审美疲劳。作为最伟大的第二十二世纪的程序员们,脱掉、搞上永远是我们最真挚的追求,所以我们要怎么将ViewHolder从BaseAdapter中脱掉呢?绝非不是不用,而是要将其搞成一个华丽丽的工具类实现,收入角落那个寂寞得tools类中。 250 | 251 | - [RecyclerView、ListView实现单选列表的优雅之路](http://blog.csdn.net/zxt0601/article/details/52703280) 252 | 253 | 254 | ## 17.Android性能优化 255 | 256 | * [Android 性能优化之被忽视的内存泄漏](http://android.jobbole.com/83898/) 257 | 258 | 写博客就像讲故事,得有起因,经过,结果,人物,地点和时间。今天就容我给大家讲一个故事。人物呢,肯定是我了。故事则发生在最近的这两天,地点在coder君上班的公司。那天无意中我发现了一个奇怪的现象,随着我点开我们App的页面,Memory Monitor中显示占用的内存越来越多(前面的页面已经finish掉了)。咦?什么鬼? 259 | 260 | * [Android应用启动优化:一种DelayLoad的实现和原理(上篇)](http://android.jobbole.com/82366/) 261 | 262 | * [Android应用启动优化:一种DelayLoad的实现和原理(下篇)](http://android.jobbole.com/82369/) 263 | 264 | * [Android APP内存优化之图片优化](http://android.jobbole.com/83782/) 265 | 266 | 网上有很多大拿分享的关于Android性能优化的文章,主要是通过各种工具分析,使用合理的技巧优化APP的体验,提升APP的流畅度,但关于内存优化的文章很少有看到。在Android设备内存动不动就上G的情况下,的确没有必要去太在意APP对Android系统内存的消耗,但在实际工作中我做的是教育类的小学APP,APP中的按钮、背景、动画变换基本上全是图片,在2K屏上(分辨率2048*1536)一张背景图片就会占用内存12M,来回切换几次内存占用就会增涨到上百兆,为了在不影响APP的视觉效果的前提下,有必要通过各种手段来降低APP对内存的消耗,下面是我在实践过程中使用的一些方法,很多都是不太成熟的项目,也不够深入,只是将其作为一种处理方式分享给大家。 267 | 268 | 通过DDMS的APP内存占用查看工具分析发现,APP中占用内存最多的是图片,每个Activity中图片占用内存占大半,本文重点分享对图片的内存优化。 269 | 270 | * [Android UI性能优化实战 识别绘制中的性能问题](http://android.jobbole.com/80947/) 271 | 272 | 2015年初google发布了Android性能优化典范,发了16个小视频供大家欣赏,当时我也将其下载,通过微信公众号给大家推送了百度云的下载地址(地址在文末,ps:欢迎大家订阅公众号),那么近期google又在udacity上开了系列类的相关课程。有了上述的参考,那么本性能优化实战教程就有了坚实的基础,本系列将结合实例为大家展示如何去识别、诊断、解决Android应用开发中存在的性能问题。那么首先带来的就是大家最关注的渲染的性能优化(~~渲染就是把东西绘制到屏幕上)。 273 | 274 | ## 18.Android进程间通信 275 | 276 | * [Android 手写 Binder 教你理解 android 中的进程间通信](http://android.jobbole.com/83957/) 277 | 278 | 其实就从我们普通app开发者的角度来看,仅仅对于android应用层的话,Binder就是客户端和服务端进行通信的媒介。 279 | 280 | * [Android 多进程编程 15问15答!](http://android.jobbole.com/83920/) 281 | 282 | 阅读本文 需要对android 多进程编程有一定了解。 283 | 284 | 285 | ## 19.ListView相关 286 | 287 | * [ListView中的RecycleBin机制](http://android.jobbole.com/83870/) 288 | 289 | 此处会传入一个convertView变量,它的值有可能是null,也有可能不是null,如果不为null,我们就可以复用该convertView,对convertView里面的一些控件赋值后可以将convertView作为getView的返回值返回,这么做的目的是减少LayoutInflater.inflate()的调用次数,从而提升了性能(LayoutInflater.inflate()比较消耗性能)。 290 | 291 | 本文将介绍ListView中的RecycleBin机制,让大家对ListView中的优化机制有个概括的了解,同时也说明convertView的来龙去脉。 292 | 293 | * [Listview异步加载图片之优化篇](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0303/948.html) 294 | 295 | 在 APP应用中,listview的异步加载图片方式能够带来很好的用户体验,同时也是考量程序性能的一个重要指标。关于listview的异步加载,网上 其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化。有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改 造,下面就让在下阐述其原理以探索个中奥秘 296 | - [ViewHolder模式超简洁写法](http://android-doc.com/apps/articles/2016/03/10/viewholder%E6%A8%A1%E5%BC%8F%E8%B6%85%E7%AE%80%E6%B4%81%E5%86%99%E6%B3%95/) 297 | 298 | 299 | 300 | ## 20.从零开始的Android新项目系列 301 | 302 | * [从零开始的Android新项目(1):架构搭建篇](http://android.jobbole.com/82624/) 303 | * [从零开始的Android新项目(2):Gradle篇](http://android.jobbole.com/82747/) 304 | * [从零开始的Android新项目(3):谁告诉你MVP和MVVM是互斥的](http://android.jobbole.com/82809/) 305 | * [从零开始的Android新项目(4):Dagger2篇](http://android.jobbole.com/82820/) 306 | * [从零开始的Android新项目(5):Repository层(上)](http://android.jobbole.com/83210/) 307 | * [从零开始的Android新项目(6):Repository层(下)](http://android.jobbole.com/83234/) 308 | * [从零开始的Android新项目(7):Data Binding入门篇](http://android.jobbole.com/83688/) 309 | * [从零开始的Android新项目(8):Data Binding高级篇](http://android.jobbole.com/83842/) 310 | 311 | ## 21.Handler相关 312 | 313 | * [Android消息处理机制:Handler|Message](http://android.jobbole.com/83823/) 314 | 315 | 在日常开发中,不管出于什么目的,我们可能都会用到Handler来异步更新UI,有时是为了将一些费时的操作放到异步线程去处理,然后通过Handler将数据更新到UI线程,有时是为了在子线程里更新UI,种种原因,反正我们最后都是选择了直接的Handler+Message组合或者AsyncTask,而了解AsyncTask的同学都知道,AsyncTask内部就是通过Handler和Message实现的线程间通信,所以我们还是要好好熟悉一下这位老朋友 316 | 317 | 318 | ## 22.Android资源动态加载 319 | 320 | * [Android apk动态加载机制的研究](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1013/1759.html) 321 | 322 | 首先宿主程序会到文件系统比如sd卡去加载apk,然后通过一个叫做proxy的activity去执行apk中的activity。 323 | 关于动态加载apk,理论上可以用到的有DexClassLoader、PathClassLoader和URLClassLoader。 324 | DexClassLoader :可以加载文件系统上的jar、dex、apk. 325 | 326 | ## 23.Android与js沟通 327 | 328 | * [好好和h5沟通!几种常见的hybrid通信方式](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0418/4157.html) 329 | 330 | 说起hybrid大家不会陌生,主要意思就是native和h5混合开发。为什么要这样做呢?大家可以想象一下针对于同一个活动,如果使用纯native的开发方式,Android和iOS两边都要维护同一套界面甚至是逻辑,这样开发和维护的成本会很大,而使用hybrid的开发方式的话,让前端的同学去写一套界面和逻辑,对于native端来说只要使用对应的容器去展示就可以了(对于Android来说这个容器当然就是WebView)。那为什么不所有的页面都使用这种方式开发呢?因为使用h5来展示界面的话用户体验始终是不如native的,所以在这两者之间我们需要一个权衡。 331 | 332 | 333 | ## 24.Android apk动态加载机制的研究 334 | 335 | * [Android apk动态加载机制的研究(一)](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1013/1759.html) 336 | 337 | * [Android apk动态加载机制的研究(二):资源加载和activity生命周期管理](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1013/1760.html) 338 | 339 | ## 25.Android多进程 340 | 341 | * [Android多进程编程15问15答](http://android.jobbole.com/83920/) 342 | 343 | 阅读本文 需要对android 多进程编程有一定了解 344 | 345 | * [Android应用内多进程的使用及注意事项](http://android.jobbole.com/83771/) 346 | 347 | 一个应用默认只有一个进程,这个进程(主进程)的名称就是应用的包名,进程是系统分配资源和调度的基本单位,每个进程都有自己独立的资源和内存空间,其它进程不能任意访问当前进程的内存和资源,系统给每个进程分配的内存会有限制。 348 | 349 | * [关于Android进程保活,你所需要知道的一切](http://android.jobbole.com/82815/) 350 | 351 | 关于 Android 平台的进程保活这一块,想必是所有 Android 开发者瞩目的内容之一。你到网上搜 Android 进程保活,可以搜出各种各样神乎其技的做法,绝大多数都是极其不靠谱。前段时间,Github还出现了一个很火的“黑科技”进程保活库,声称可以做到进程永生不死。 352 | 353 | 354 | 355 | ## 26.Android系统级原理 356 | 357 | * [理解Android安全机制](http://android.jobbole.com/82409/) 358 | 359 | 本文从Android系统架构着手,分析Android的安全机制以SE Android,最后给出一些Android安全现状和常见的安全解决方案。 360 | 361 | 362 | ## 27.RxJava+Retrofit+Dagger2 363 | 364 | * [带你学开源项目:Meizhi Android之RxJava&Retrofit最佳实践](http://android.jobbole.com/82737/) 365 | 366 | 367 | ## 28.Android优化工具 368 | 369 | * [值得推荐的Android应用性能检测工具列表](http://android.jobbole.com/82572/) 370 | * [Android应用开发性能优化完全分析](http://blog.csdn.net/yanbober/article/details/48394201) 371 | 372 | 373 | ## 29.Android新编译系统 374 | 375 | * [Android 应用开发编译框架流程与IDE及Gradle概要](http://android.jobbole.com/82031/) 376 | 377 | ## 30.Android注解框架 378 | 379 | * [Android 打造编译时注解解析框架 这只是一个开始](http://android.jobbole.com/80977/) 380 | 381 | ## 31.Material Design相关 382 | 383 | * [Material Design 开发利器:Android Design Support Library 介绍](https://blog.leancloud.cn/3306/) 384 | 385 | ## 32 butterknife相关 386 | 387 | * [butterknife官网](http://jakewharton.github.io/butterknife/) 388 | 389 | ## 33 MVP架构 390 | 391 | * [一步一步实现Android的MVP框架](http://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg%3D%3D&idx=1&mid=2653577546&scene=1&sn=e10be159645a3aa8f6d6f209420fb412&srcid=07289Nbf5unjDpiRXxvw1G90) 392 | 393 | 1.Android 开发框架的选择 394 | 395 | 2.如何一步步搭建分层框架 396 | 397 | 3.使用 RxJava 来解决主线程发出网络请求的问题 398 | 399 | * [浅谈Andorid开发中的MVP模式](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2016/0225/3994.html) 400 | 401 | 看到MVP,大家肯定会想什么是MVP呢?这个我可以肯定的告诉大家MVP(Most Valuable Player)是最有价值球员的意思,这当然是开玩笑了。之所以会出现MVP这种架构模式,是因为我相信大家在开发App时,肯定会发现,Activity的负担非常重,既要初始化控件,又要写一些逻辑操作的展示等等,有时候很多Activity中的代码都充当了Controller和Model的角色,所以你会发现Activity违背单一职责原则,负担过重。所以,就出现了这么一种架构模式,叫MVP,并不是最有价值球员哦。 402 | 403 | - [为什么选择MVP?](https://github.com/boredream/DesignResCollection/tree/master/DesignResCollection_MVP) 404 | 405 | ## 34 Gradle相关 406 | 407 | - [加速Android Studio/Gradle构建](http://blog.isming.me/2015/03/18/android-build-speed-up/) 408 | 409 | 效果很明显啊!之前的构建时间为20分钟,添加了配置之后构建时间仅为36秒!!! 410 | 411 | - [Android模块化编程之引用本地的aar](http://stormzhang.com/android/2015/03/01/android-reference-local-aar/) 412 | 413 | jar:java代码 414 | 415 | aar:包含java代码和资源文件 416 | 417 | - [mvn-repo](https://github.com/Goddchen/mvn-repo) 418 | 419 | - [常用的Gradle命令](http://seniorzhai.github.io/2015/08/16/%E5%B8%B8%E7%94%A8%E7%9A%84Gradle%E5%91%BD%E4%BB%A4/) 420 | 421 | 422 | - [Android Studio通过Gradle命令来编译生成打包APK(Windows版本)](http://www.whatjay.com/?p=999) 423 | 424 | - [android studio生成aar包并在其他工程引用aar包](http://www.mobile-open.com/2016/972218.html) 425 | 426 | ## 35 进行保活 427 | 428 | - [Android 进程保活招式大全](https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653577617&idx=1&sn=623256a2ff94641036a6c9eea17baab8) 429 | 430 | ## 36 APP启动相关 431 | 432 | - [Android Application启动流程分析](http://www.jianshu.com/p/a5532ecc8377) 433 | 434 | ## 37 Android处理器相关 435 | 436 | - [三种移动处理器(ARM, Intel和MIPS)之间的主要区别](http://www.vaikan.com/arm-vs-x86-key-differences-explained/) 437 | 438 | 安卓支持3类处理器(CPU):ARM, Intel和MIPS。其中ARM无疑被使用得最为广泛。Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小。MIPS在32位和64位嵌入式领域中历史悠久,获得了不少的成功,可目前Android的采用率在三者中最低。 439 | 440 | ## 38 Android动态赋予权限 441 | 442 | - [Dexter](https://github.com/Karumi/Dexter) 443 | 444 | Android library that simplifies the process of requesting permissions at runtime. http://karumi.com 445 | 446 | - [AndroidAcp](https://github.com/mylhyl/AndroidAcp) 447 | 448 | 一句话搞定,简化Android 6.0 系统复杂的权限操作。 449 | 450 | ## 39 Android图片处理相关 451 | 452 | - [uCrop](https://github.com/Yalantis/uCrop) 453 | 454 | Image Cropping Library for Android https://yalantis.com/blog/introducing-ucrop-our-own-image-cropping-library-for-android/ 455 | 456 | - [TakePhoto](https://github.com/crazycodeboy/TakePhoto) 457 | 458 | 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库 459 | 460 | ## 40 三方库封装 461 | 462 | - [FrescoUtlis](http://p.codekk.com/detail/Android/glassLake/FrescoUtlis) 463 | 464 | - [解耦项目中的图片加载库](http://juhonggang.github.io/2016/09/22/%E8%A7%A3%E8%80%A6%E9%A1%B9%E7%9B%AE%E4%B8%AD%E7%9A%84%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) 465 | - [真实案例出发,再谈retrofit封装](http://www.open-open.com/lib/view/open1476413037794.html) 466 | 467 | ## 41 调试优化工具 468 | 469 | - [ChkBugReport](https://github.com/DoubleDa/ChkBugReport) 470 | 471 | A command line tool which parses and converts android bugreport files into more human readable html reports 472 | 473 | - [battery-historian](https://github.com/google/battery-historian) 474 | 475 | Battery Historian is a tool to analyze battery consumers using Android "bugreport" files. 476 | 477 | ## 42 UI/UX设计相关 478 | 479 | - [awesome-android-ui](https://github.com/wasabeef/awesome-android-ui) 480 | 481 | A curated list of awesome Android UI/UX libraries https://twitter.com/wasabeef_jp 482 | 483 | ## 43 应用安全 484 | 485 | - [IntentBuilder](https://github.com/emilsjolander/IntentBuilder) 486 | 487 | Type safe intent building for services and activities 488 | 489 | - [icepick](https://github.com/frankiesardo/icepick) 490 | 491 | Android Instance State made easy 492 | 493 | ## 44 Android SDK源码解析 494 | 495 | - [AndroidSdkSourceAnalysis](https://github.com/LittleFriendsGroup/AndroidSdkSourceAnalysis) 496 | 497 | - [AppUninstall](https://github.com/venshine/AppUninstall) 498 | - [AndroidAcp](https://github.com/mylhyl/AndroidAcp) 499 | - [BaseLibrary](https://github.com/vivitale/BaseLibrary) 500 | - [taeandroiddemo](https://github.com/heartaway/taeandroiddemo) 501 | - [Dagger2-example](https://github.com/dlazaro66/Dagger2-example) 502 | 503 | First steps using Dagger2 dependency Injection framework in Android 504 | 505 | - [the-fucking-traps-in-android-dev](https://github.com/simple-android-framework-exchange/the-fucking-traps-in-android-dev) 506 | 507 | 分享你在开发过程中遇到的坑,可以是某个具体的难点,可以分享某个好的开源库如何解决了你的问题,也可以是好的设计、开发方法、成长之路,总之把你的开发经验分享给我们吧,为你热爱的行业做出一份贡献。 508 | 509 | ## 45 Webview相关 510 | 511 | - [Android WebView常见问题及解决方案汇总](http://blog.csdn.net/t12x3456/article/details/13769731) 512 | 513 | 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是乎,一种混合型的app诞生了,灵活多变的部分,如淘宝商城首页的活动页面,一集凡客诚品中我们都可以见到web 页面与native页面的混合,既利用了web app的灵活易更新,也借助了native app本身的效率. 514 | 515 | - [Android WebView 漏洞的利用、局限与终结](http://www.open-open.com/lib/view/open1476252611385.html) 516 | 517 | 518 | ## 46 Android热更新 519 | 520 | - [Instant Run工作原理及用法](http://www.jianshu.com/p/2e23ba9ff14b) 521 | 522 | Instant Run,是android studio2.0新增的一个运行机制,在你编码开发、测试或debug的时候,它都能显著减少你对当前应用的构建和部署的时间。当我们第一次点击run、debug按钮的时候,它运行时间和我们往常一样。但是接下去的时间里,你每次修改代码后点击run、debug按钮,对应的改变将迅速的部署到你正在运行的程序上,传说速度快到你都来不及把注意力集中到手机屏幕上,它就已经做好相应的更改。 523 | 524 | - [Android热更新方案Robust](http://www.open-open.com/lib/view/open1473838879653.html) 525 | 526 | 去年底的Android Dev Summit上,Google高调发布了Android Studio 2.0,其中最重要的新特性Instant Run,实现了对代码修改的实时生效(热插拔)。我们在了解Instant Run原理之后,实现了一个兼容性更强的热补丁方案,这就是产品化的hotpatch框架--Robust。 527 | 528 | 529 | ## 47 Android N相关 530 | 531 | - [Android N混合编译与对热补丁影响深度解析](https://github.com/WeMobileDev/article/blob/master/Android_N%E6%B7%B7%E5%90%88%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AF%B9%E7%83%AD%E8%A1%A5%E4%B8%81%E5%BD%B1%E5%93%8D%E8%A7%A3%E6%9E%90.md) 532 | 533 | ## 48 热修复技术 534 | 535 | - [基于Instant Run思想的HotFix方案实现](http://www.open-open.com/lib/view/open1474699014422.html) 536 | 537 | 近一年来,各种HotFix库层出不穷,各家大厂百花齐放,QQ空间最早提出了自己的热修复实现,接着阿里也开源了自家的AndFix(貌似阿里百川已经给开发者提供了新的Hotfix功能),现在微信又有了Tinker,各家都如此关心HotFix,无非是线上版本的bug对产品影响太大,尤其是DAU比较高的app,更是不能容忍。前几天看到美团基于Instant run原理推出了自己的Hotfix库,不过貌似没有开源,于是自己就按照Instant run的原理也鼓捣出了一个简单的HotFix实现, 可以在不重启App和Activity的条件下实现修复, 代码地址会在文章最后贴出,供大家研究学习。 538 | 539 | ## 49 View相关 540 | 541 | - [实现View滑动的七种方法](http://www.open-open.com/lib/view/open1474698624932.html) 542 | 543 | - [Android 自定义控件之圆形扩散View(DiffuseView)](http://blog.csdn.net/airsaid/article/details/52683193) 544 | - [想要亲手实现一个刷新控件,你只需要掌握这些知识](http://www.open-open.com/lib/view/open1476176237957.html) 545 | 546 | ## 50 Service源码 547 | 548 | - [从源码出发深入理解 Android Service](http://www.open-open.com/lib/view/open1474617316156.html) 549 | 550 | ## 51 JsBridge 551 | 552 | - [JS 与 Native 安全交互浅析,两种方式实现](http://www.open-open.com/lib/view/open1474616675935.html) 553 | 554 | - [JsBridge](https://github.com/lzyzsd/JsBridge) 555 | 556 | ## 52 项目架构 557 | 558 | - [一个Android项目搞定所有主流架构](http://www.open-open.com/lib/view/open1474594334149.html) 559 | 560 | ## 53 性能优化 561 | 562 | - [Android耗电量测试及排查方法](http://mp.weixin.qq.com/s?__biz=MzAwNTI4NzIxMQ==&mid=2651473357&idx=1&sn=2caec1b5ea02a95e7a9526092f13751a&chksm=80e01989b797909fbb662f96294524cee35252a14454313501024bc30aa40675508fcae228de&scene=2&srcid=0920179NkApCP5usiHOi339F&from=timeline&isappinstalled=0#wechat_redirect) 563 | Android应用耗电量一直是比较麻烦的,也是大家所关注的问题,在4.4系统之前,google一直没有相关API暴露给外面,所以要研究4.4系统以前的耗电量,就需要研读Android的源码;5.0之后的系统,就可以使用adb命令直接获取。 564 | 565 | 566 | - [App优化之提升你的App启动速度之实例挑战](http://www.jianshu.com/p/4f10c9a10ac9?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) 567 | 568 | - [Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手](http://www.open-open.com/lib/view/open1474966436570.html) 569 | 570 | 图片加载性能优化永远是 Android 领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco、Picasso、UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降低了OOM发生的概率。然而,在图片加载方面我们是否可以就此放松警惕了呢? 571 | 572 | - [阿里无线11.11:手机淘宝 521 性能优化项目揭秘](http://www.infoq.com/cn/articles/mobile-taobao-521-performance-optimization-project) 573 | 574 | 又是一年双十一,亿万用户都会在这一天打开手机淘宝,高兴地在会场页面不断浏览,面对琳琅满目的商品图片,抢着添加购物车,下单付款。为了让用户更顺畅更方便地实现这一切,做到“如丝般顺滑”,双十一前夕手机淘宝成立了“521”(我爱你)性能优化项目,在日常优化基础之上进行三个方面的专项优化攻关,分别是1)H5页面的一秒法则;2)启动时间和页面帧率提升20%;3)Android内存占用降低50%。优化过程中遇到的困难,思考后找寻的方案,实施后提取的经验都会在下面详细地介绍给读者。 575 | 576 | - [Facebook App 优化工具 ReDex 优化的 6 点及未优化的一大方面](http://blogread.cn/it/article/8057?f=catetitle) 577 | 578 | ## 54 MVVM架构 579 | 580 | - [Android MVVM之Data Binding](http://www.open-open.com/lib/view/open1475139905023.html) 581 | 582 | Data Binding Library 是一个灵活、兼容的 support library ,可以在Android2.1(API 7)以上使用。使用DataBing,Gradle的Android Plugin需要在1.5.0-alpha1以上。 583 | 584 | ## 55 Activity相关 585 | 586 | - [Activity横竖屏切换的那些事(生命周期,数据恢复,防止重建)](http://www.open-open.com/lib/view/open1475133107546.html) 587 | 588 | Activity的生命周期,这是每个Android开发者必须了解的知识。Activity是四大组件之一,而且是使用最频繁的组件。横竖屏切换是每个Android开发者都会遇到的问题。那么横竖屏切换后Activity到底发生了什么呢? 589 | 590 | ## 56 数据库相关 591 | 592 | - [SQLCipher android 数据库加密](http://www.open-open.com/lib/view/open1475130932566.html) 593 | 594 | ## 57 增量更新 595 | 596 | - [Android 增量更新完全解析 是增量不是热修复](http://gold.xitu.io/post/57fba92abf22ec00649de645) 597 | 598 | ## 58 Android架构相关 599 | 600 | - [Atlas:手淘Native容器化框架和思考](http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112809&idx=1&sn=8d45d8960acde6128b121fb10a6d7bb7&chksm=844c6cb4b33be5a24cd462aa2fa96ce206877e0a87959df9aba03826d6be045dcaf6b9748739&mpshare=1&scene=2&srcid=1019jjkjbYJCdkgj2j1wQqTK&from=timeline&isappinstalled=0#wechat_redirect) 601 | 602 | - [Android业务组件化开发实践](http://kymjs.com/code/2016/10/18/01) 603 | 604 | ## 59 Android项目重构 605 | 606 | - [Android 开发软件架构思考以及经验总结](http://www.open-open.com/lib/view/open1484548261803.html) 607 | 608 | - [人人车 Android 客户端架构演进实录](http://www.open-open.com/lib/view/open1484208077561.html) 609 | 610 | - [英语流利说 Android 架构演进](https://blog.dreamtobe.cn/2016/05/29/lls_architecture/) 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | -------------------------------------------------------------------------------- /React Native相关.md: -------------------------------------------------------------------------------- 1 | React Native相关 2 | 3 | - [基于 React Native 的 58 同城 App 开发实践](http://mp.weixin.qq.com/s?__biz=MzA4MzEwOTkyMQ==&mid=2667376230&idx=1&sn=77f66b21ed1a8bf75f8e49b4327fa0dc&chksm=84f33f28b384b63e0d801aa7f2d11314dff105aa82122d043cfc552e52f2877e6c6d07ca016d&scene=0#wechat_redirect) 4 | 5 | React Native 在 iOS 界早就炒得火热了,随着 2015 年底 Android 端推出后,一套代码能运行于双平台上,真正拥有了 Hybrid 框架的所有优势。再加上 Native 的优秀性能,让越来越多的公司在实际项目中一探究竟。58 同城 App 发布模块年代久远,一直计划进行重构以适应日益苛刻的用户体验,这个需求与我们在 React Native 上一探究竟的意愿一碰撞,就产生了 React Native 在 58 App 的开发实践。 6 | 7 | -------------------------------------------------------------------------------- /System App Develope.md: -------------------------------------------------------------------------------- 1 | 系统应用开发 2 | 3 | ## 系统发布 4 | 5 | - [什么是灰度发布?](http://djt.qq.com/article/view/16) 6 | 7 | 灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。 8 | 9 | 10 | - [灰度发布相关学习笔记](http://linliuzi.github.io/pages/2014/03/02/new_20140302.html) 11 | 12 | **灰度发布**是指在黑与白之间,能够平滑过渡的一种发布方式。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。 13 | 14 | **灰度发布系统**,主要任务是从产品用户群中按照一定策略选取部分用户,让他们先行体验新版本的应用,通过收集这部分用户对新版本应用的显式反馈(论坛、微博)或隐式反馈(应用自身统计数据),对新版本应用的功能、性能、稳定性等指标进行评判,进而决定继续放大新版本投放范围直至全量升级或回滚至老版本。 15 | 16 | 17 | ## 电商并发 18 | 19 | - [电商那些年,我摸爬打滚出的高并发架构实战精髓](http://dbaplus.cn/news-21-704-1.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) 20 | 21 | 高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击,再屌丝点的说法就像玩LOL被ADC暴击了一样,那伤害你懂的。 22 | 23 | - [日均十亿级别的数据如何做到秒导、秒查?](http://dbaplus.cn/news-73-701-1.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) 24 | 25 | 很多朋友想知道神策分析是如何实现在每天十亿级别数据的情况下能做到秒级导入和秒级查询,以及如何做到不需要预先指定指标和维度就能实现多维查询的。今天借此分享的机会,和大家交流一下我们的技术选型与具体的架构实现,希望能够对大家有所启发。 26 | 27 | 28 | 29 | 30 | 31 | 32 | --------------------------------------------------------------------------------