From 041f2a04ca66c3a616b8da42844263d8f84c7ed5 Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 11 Oct 2017 15:22:24 +0800 Subject: [PATCH 01/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0tablayout=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tablayout\350\256\260\345\275\225.md" | 47 +++++++++++++++++++ README.md | 21 ++++----- 2 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 "AndroidNote/Android\345\237\272\347\241\200/tablayout\350\256\260\345\275\225.md" diff --git "a/AndroidNote/Android\345\237\272\347\241\200/tablayout\350\256\260\345\275\225.md" "b/AndroidNote/Android\345\237\272\347\241\200/tablayout\350\256\260\345\275\225.md" new file mode 100644 index 0000000..63a86ec --- /dev/null +++ "b/AndroidNote/Android\345\237\272\347\241\200/tablayout\350\256\260\345\275\225.md" @@ -0,0 +1,47 @@ +# TabLayout记录 + +今天用TabLayout的时候发现,TabLayout的setOnPageChangeListener的方法过期了,良好的编程习惯是不在项目中使用过时的方法的,所以要找一个替代的方案: + +``addOnPageChangeListener`` + +- setOnPageChangeListener + +``` +mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { +@Override +public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + +} + +@Override +public void onPageSelected(int position) { + +} + +@Override +public void onPageScrollStateChanged(int state) { + +} +}); +``` + +- addOnPageChangeListener + +``` +mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { +@Override +public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + +} + +@Override +public void onPageSelected(int position) { + selectedTab(position); +} + +@Override +public void onPageScrollStateChanged(int state) { + +} +}); +``` diff --git a/README.md b/README.md index 345b7a4..1f0f7af 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android获取SHA1](/AndroidNote/Android基础/Android获取SHA1.md) - [Recyclerview和Listview的异同.md](/AndroidNote/Android进阶/Recyclerview和Listview的异同.md) - [初识ConstraintLayout](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548068&idx=1&sn=f750ae79c9458f89c3cf85f7573ba579&scene=21#wechat_redirect) +- [TabLayout记录](/AndroidNote/Android基础/tablayout记录.md) + ### Android进阶 @@ -142,6 +144,13 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) +---- + +## Git教程 + +- [Git详细教程](/Git/git详细教程.md) + + ---- @@ -247,15 +256,3 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) - - - - - - - - - - - - From 55521b0ee2ca292d0d1755acc3cb38517bf05563 Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 15 Oct 2017 20:03:04 +0800 Subject: [PATCH 02/95] test --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 1f0f7af..3eff32f 100644 --- a/README.md +++ b/README.md @@ -256,3 +256,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) + + +//test + + From 7c41b7ee676e2953a61b26315b1d03e0a7097d5b Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 16 Oct 2017 17:17:58 +0800 Subject: [PATCH 03/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=96=87?= =?UTF-8?q?=E7=AB=A0=20adnroid=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3eff32f..bed24ea 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android进阶 -- [Android官网建议代码规范.md](https://source.android.com/source/code-style#java-language-rules) +- [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) - [Android中的动画](/AndroidNote/Android进阶/Android中的动画.md) - [深入了解MVXX模式](/AndroidNote/Android进阶/深入了解MVXX模式.md) - [Android项目总结](/AndroidNote/Android进阶/Android项目总结.md) @@ -62,7 +62,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [插件化实现的思想](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649547660&idx=1&sn=d2764b282fdf1c1fdb629f9c2ca9b10f&scene=21#wechat_redirect) - [Android 7.0新特性总结](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548427&idx=1&sn=df9956d131a6da5f29292cd05a61b16e&chksm=f1180df6c66f84e0097eea33bba6abb125b6bcd6847720a7c481a85001a52ae2e4b1941690eb&scene=21#wechat_redirect) - [RecyclerView局部刷新的坑](http://blog.csdn.net/jdsjlzx/article/details/52893469) - +- [Android单元测试](https://tech.meituan.com/Android_unit_test.html) ### 自定义View @@ -256,8 +256,3 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) - - -//test - - From 48802308d5a73e2ac5690c1e272d7a26c3a97e2d Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 18 Oct 2017 13:46:09 +0800 Subject: [PATCH 04/95] =?UTF-8?q?=E2=80=9C=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=8A=A5=E9=94=99=E8=AE=B0=E5=BD=95=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Android\346\212\245\351\224\231-Client not ready yet.md" | 6 ++++++ README.md | 1 + 2 files changed, 7 insertions(+) create mode 100644 "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" diff --git "a/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" "b/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" new file mode 100644 index 0000000..b405610 --- /dev/null +++ "b/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" @@ -0,0 +1,6 @@ +## Client not ready yet.. + + +这个错误导致的原因是,我们的AndroidManifest.xml中没有配置,默认的启动项。 + +还有一个原因就是可能我们的编辑器bug了,我们可以删掉再加回来。 diff --git a/README.md b/README.md index bed24ea..8b9a0ad 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android报错记录 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) +- [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错-Client not ready yet.md) ---- From db16b4f9523e4d70c5d9ecdbba2fa9b9bcae8ede Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 18 Oct 2017 13:47:01 +0800 Subject: [PATCH 05/95] =?UTF-8?q?=E2=80=9C=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=8A=A5=E9=94=99=E8=AE=B0=E5=BD=95=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b9a0ad..0a6869a 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android报错记录 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) -- [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错-Client not ready yet.md) +- [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错-Client-not-ready-yet.md) ---- From c7e3f86d766a76c1aaa0421efed133b72e804066 Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 18 Oct 2017 13:47:57 +0800 Subject: [PATCH 06/95] =?UTF-8?q?=E2=80=9C=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=8A=A5=E9=94=99=E8=AE=B0=E5=BD=95=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" => "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" (100%) diff --git "a/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" "b/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" similarity index 100% rename from "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client not ready yet.md" rename to "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" From b300592c1c057ba4ffb2f46a545d55554fed5a11 Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 18 Oct 2017 13:51:13 +0800 Subject: [PATCH 07/95] =?UTF-8?q?=E2=80=9C=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=8A=A5=E9=94=99=E8=AE=B0=E5=BD=95=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Android\346\212\245\351\224\2312.md" | 0 README.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" => "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\2312.md" (100%) diff --git "a/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" "b/AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\2312.md" similarity index 100% rename from "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\231-Client-not-ready-yet.md.md" rename to "AndroidNote/Android\346\212\245\351\224\231\350\256\260\345\275\225/Android\346\212\245\351\224\2312.md" diff --git a/README.md b/README.md index 0a6869a..9368a28 100644 --- a/README.md +++ b/README.md @@ -142,7 +142,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android报错记录 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) -- [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错-Client-not-ready-yet.md) +- [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错2.md) ---- From fd80f13e39f745fb99428d8b737af1d4cd3960cd Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 15:50:36 +0800 Subject: [PATCH 08/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E7=BC=96=E7=A0=81=E7=AC=94=E8=AE=B0=EF=BC=9AASCII?= =?UTF-8?q?=EF=BC=8CUnicode=E5=92=8CUTF-8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9368a28..00176b2 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android进阶 + - [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) - [Android中的动画](/AndroidNote/Android进阶/Android中的动画.md) - [深入了解MVXX模式](/AndroidNote/Android进阶/深入了解MVXX模式.md) @@ -101,6 +102,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) +- [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [十大基础算法](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401441966&idx=1&sn=653fe22c5a7e6c221fbf121124fd18a2&scene=21#wechat_redirect) - [一套比较好的面试题](http://blog.csdn.net/xhmj12/article/details/54730883) - [Android中常见面试题](/AndroidNote/Android面试相关/Android中常见面试题.md) From ce29d7f43ea3adaf6ddffb2f9a43c9909b65b435 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:27:09 +0800 Subject: [PATCH 09/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gradle=20=E8=AF=A6?= =?UTF-8?q?=E8=A7=A3=E2=80=94=E2=80=94=E4=BD=A0=E7=9C=9F=E7=9A=84=E4=BA=86?= =?UTF-8?q?=E8=A7=A3Gradle=E5=90=97=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 00176b2..49f227f 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android 7.0新特性总结](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548427&idx=1&sn=df9956d131a6da5f29292cd05a61b16e&chksm=f1180df6c66f84e0097eea33bba6abb125b6bcd6847720a7c481a85001a52ae2e4b1941690eb&scene=21#wechat_redirect) - [RecyclerView局部刷新的坑](http://blog.csdn.net/jdsjlzx/article/details/52893469) - [Android单元测试](https://tech.meituan.com/Android_unit_test.html) +- [gradle 详解——你真的了解Gradle吗?](http://blog.csdn.net/u013132758/article/details/52355915) ### 自定义View From b50251bce0513776cf9d0232c04b128d4cb07b87 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:31:49 +0800 Subject: [PATCH 10/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Android=E5=A4=9A?= =?UTF-8?q?=E6=B8=A0=E9=81=93=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 49f227f..bfddb1f 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [RecyclerView局部刷新的坑](http://blog.csdn.net/jdsjlzx/article/details/52893469) - [Android单元测试](https://tech.meituan.com/Android_unit_test.html) - [gradle 详解——你真的了解Gradle吗?](http://blog.csdn.net/u013132758/article/details/52355915) +- [AndroidStudio-Gradle多渠道打包](http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/) + ### 自定义View From 73d45dd3517eb3cc6f62d5dcdb2e6a08e886daa5 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:38:37 +0800 Subject: [PATCH 11/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Android13=E7=A7=8DDrawa?= =?UTF-8?q?ble=E5=B0=8F=E8=8A=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bfddb1f..40efd29 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android单元测试](https://tech.meituan.com/Android_unit_test.html) - [gradle 详解——你真的了解Gradle吗?](http://blog.csdn.net/u013132758/article/details/52355915) - [AndroidStudio-Gradle多渠道打包](http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/) - +- [Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1](http://blog.csdn.net/coder_pig/article/details/49006217) +- [Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2](http://blog.csdn.net/coder_pig/article/details/49008397) ### 自定义View From 97475e1d01e056a0499df65c8c30fe8930f939aa Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:47:11 +0800 Subject: [PATCH 12/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0android-drawable?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E7=94=A8=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 40efd29..c14b070 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [AndroidStudio-Gradle多渠道打包](http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/) - [Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1](http://blog.csdn.net/coder_pig/article/details/49006217) - [Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2](http://blog.csdn.net/coder_pig/article/details/49008397) +- [Android-Drawable高级用法](http://blog.csdn.net/lmj623565791/article/details/43752383) + ### 自定义View From 5fe50872f1275ba4070becc1815ab7e7480732f4 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:52:02 +0800 Subject: [PATCH 13/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E2=80=9C15=E3=80=82=E3=80=82=E3=80=82?= =?UTF-8?q?=E3=80=82=E3=80=82=E2=80=9D=E8=83=8C=E5=90=8E=E7=9A=84=E6=95=85?= =?UTF-8?q?=E4=BA=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c14b070..caa3365 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) - [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错2.md) +- [微信“15。。。。。”背后的故事](https://mp.weixin.qq.com/s/4DBPTN5qoVa976i8uTNAUQ) ---- From a83440dfba4cec12c0ba6d64c7a6b17c3d49f529 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 23 Oct 2017 20:58:14 +0800 Subject: [PATCH 14/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20?= =?UTF-8?q?=E5=AE=89=E5=8D=93=E5=BC=80=E8=B8=A9=E8=BF=87=E7=9A=84=E5=9D=91?= =?UTF-8?q?=EF=BC=9A=E4=BD=A0=E7=9A=84=20Bitmap=20=E7=A9=B6=E7=AB=9F?= =?UTF-8?q?=E5=8D=A0=E5=A4=9A=E5=A4=A7=E5=86=85=E5=AD=98=EF=BC=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index caa3365..08a0d69 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1](http://blog.csdn.net/coder_pig/article/details/49006217) - [Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2](http://blog.csdn.net/coder_pig/article/details/49008397) - [Android-Drawable高级用法](http://blog.csdn.net/lmj623565791/article/details/43752383) - +- [安卓开踩过的坑:你的 Bitmap 究竟占多大内存?](http://dev.qq.com/topic/591d61f56793d26660901b4e) ### 自定义View From eaaf27de483b9907d14350e0cf71e72d37f5da9d Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 10:24:12 +0800 Subject: [PATCH 15/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E7=94=A8SpannableString=E6=89=93=E9=80=A0=E7=BB=9A=E4=B8=BD?= =?UTF-8?q?=E5=A4=9A=E5=BD=A9=E7=9A=84=E6=96=87=E6=9C=AC=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 08a0d69..081343d 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,14 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Recyclerview和Listview的异同.md](/AndroidNote/Android进阶/Recyclerview和Listview的异同.md) - [初识ConstraintLayout](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548068&idx=1&sn=f750ae79c9458f89c3cf85f7573ba579&scene=21#wechat_redirect) - [TabLayout记录](/AndroidNote/Android基础/tablayout记录.md) +- [用SpannableString打造绚丽多彩的文本显示效果](http://www.jianshu.com/p/84067ad289d2) ### Android进阶 - [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) +- [30多年编码经验总结成10条最佳实践](https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484524&idx=1&sn=5b2759e6d89f01e61d021545ca7556b9&chksm=e82c3d4bdf5bb45dd77227982931ede8229ee6910829253a57bb905e810c89bd3f0a162786e8&mpshare=1&scene=23&srcid=1023FjKcLWtRlcDpwEeeJnCN#rd) - [Android中的动画](/AndroidNote/Android进阶/Android中的动画.md) - [深入了解MVXX模式](/AndroidNote/Android进阶/深入了解MVXX模式.md) - [Android项目总结](/AndroidNote/Android进阶/Android项目总结.md) From 50993018d6045e17925809477249b394088cab97 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 10:50:08 +0800 Subject: [PATCH 16/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20An?= =?UTF-8?q?droid=E3=80=91=E5=BD=93=E5=85=B3=E9=97=AD=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=9D=83=E9=99=90=E5=90=8E=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=B3=BB=E7=BB=9FToast=E7=9A=84=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 081343d..7b7ce9e 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android报错:Manifest-merger-failed-with-multiple-errors,see-logs](https://github.com/linsir6/AndroidNote/blob/master/AndroidNote/Android%E6%8A%A5%E9%94%99%E8%AE%B0%E5%BD%95/Android%E6%8A%A5%E9%94%99-Manifest%20merger%20failed%20with%20multiple%20errors%2C%20see%20logs.md) - [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错2.md) - [微信“15。。。。。”背后的故事](https://mp.weixin.qq.com/s/4DBPTN5qoVa976i8uTNAUQ) +- [【Android】当关闭通知消息权限后无法显示系统Toast的解决方案](http://blog.csdn.net/qq_25867141/article/details/52807705) ---- From cf06a923e03f2f97e8dcd8087b9dfcf97a7978e3 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 11:00:51 +0800 Subject: [PATCH 17/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8Android=E5=86=85=E7=BD=AEWebView=E6=89=93?= =?UTF-8?q?=E5=BC=80TextView=E4=B8=AD=E7=9A=84=E8=B6=85=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7b7ce9e..46a31ba 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android报错-Client not ready yet](/AndroidNote/Android报错记录/Android报错2.md) - [微信“15。。。。。”背后的故事](https://mp.weixin.qq.com/s/4DBPTN5qoVa976i8uTNAUQ) - [【Android】当关闭通知消息权限后无法显示系统Toast的解决方案](http://blog.csdn.net/qq_25867141/article/details/52807705) +- [使用Android内置WebView打开TextView中的超链接](http://iluhcm.com/2016/07/06/how-to-open-a-hyperlink-using-app-webview-with-textview/) ---- From a2de032186167130e1a7b2c933991a772a3b0edd Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 11:42:09 +0800 Subject: [PATCH 18/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Android=204.4=20?= =?UTF-8?q?=E4=B8=AD=20WebView=20=E4=BD=BF=E7=94=A8=E6=B3=A8=E6=84=8F?= =?UTF-8?q?=E4=BA=8B=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 46a31ba..77d16ac 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2](http://blog.csdn.net/coder_pig/article/details/49008397) - [Android-Drawable高级用法](http://blog.csdn.net/lmj623565791/article/details/43752383) - [安卓开踩过的坑:你的 Bitmap 究竟占多大内存?](http://dev.qq.com/topic/591d61f56793d26660901b4e) +- [Android 4.4 中 WebView 使用注意事项](https://github.com/cundong/blog/blob/master/Android%204.4%20%E4%B8%AD%20WebView%20%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) + ### 自定义View From 77858660a2b18e7b9d39997e7c2b1e8731c58d4c Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 11:46:06 +0800 Subject: [PATCH 19/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Android=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E5=A4=84=E7=90=86=20-=20=E9=AB=98=E6=96=AF=E6=A8=A1?= =?UTF-8?q?=E7=B3=8A=E7=9A=84=E5=8E=9F=E7=90=86=E5=8F=8A=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77d16ac..a966557 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android-Drawable高级用法](http://blog.csdn.net/lmj623565791/article/details/43752383) - [安卓开踩过的坑:你的 Bitmap 究竟占多大内存?](http://dev.qq.com/topic/591d61f56793d26660901b4e) - [Android 4.4 中 WebView 使用注意事项](https://github.com/cundong/blog/blob/master/Android%204.4%20%E4%B8%AD%20WebView%20%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) - +- [Android图像处理 - 高斯模糊的原理及实现](https://mp.weixin.qq.com/s?__biz=MzI2MTU3MTE4NQ==&mid=2247483896&idx=1&sn=50c61e2c78aa610a1944be6a89bd75e5&chksm=ea5916e6dd2e9ff0a62af64c7f345ffb5c6dafdb65847b757b99afcc6fed8e1270e915dbcb25&mpshare=1&scene=23&srcid=1001DxwdQpiMwea74mczpSw8#rd) ### 自定义View From a652bad454e90a66fc983363aca6c9fdeaacb514 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 11:53:28 +0800 Subject: [PATCH 20/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Android=E5=AE=9E?= =?UTF-8?q?=E6=88=98=E2=80=94=E2=80=94GreenDao3.2=E7=9A=84=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E7=88=B1=E4=B8=8D=E9=87=8A=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a966557..e8b88e3 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [安卓开踩过的坑:你的 Bitmap 究竟占多大内存?](http://dev.qq.com/topic/591d61f56793d26660901b4e) - [Android 4.4 中 WebView 使用注意事项](https://github.com/cundong/blog/blob/master/Android%204.4%20%E4%B8%AD%20WebView%20%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) - [Android图像处理 - 高斯模糊的原理及实现](https://mp.weixin.qq.com/s?__biz=MzI2MTU3MTE4NQ==&mid=2247483896&idx=1&sn=50c61e2c78aa610a1944be6a89bd75e5&chksm=ea5916e6dd2e9ff0a62af64c7f345ffb5c6dafdb65847b757b99afcc6fed8e1270e915dbcb25&mpshare=1&scene=23&srcid=1001DxwdQpiMwea74mczpSw8#rd) +- [Android实战——GreenDao3.2的使用,爱不释手](https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA) + ### 自定义View From edfddf1ad2bae27047a5e43f67f5d38718096e28 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 24 Oct 2017 12:03:16 +0800 Subject: [PATCH 21/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Realm=20for=20Androi?= =?UTF-8?q?d=E8=AF=A6=E7=BB=86=E6=95=99=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e8b88e3..448d1c9 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android 4.4 中 WebView 使用注意事项](https://github.com/cundong/blog/blob/master/Android%204.4%20%E4%B8%AD%20WebView%20%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) - [Android图像处理 - 高斯模糊的原理及实现](https://mp.weixin.qq.com/s?__biz=MzI2MTU3MTE4NQ==&mid=2247483896&idx=1&sn=50c61e2c78aa610a1944be6a89bd75e5&chksm=ea5916e6dd2e9ff0a62af64c7f345ffb5c6dafdb65847b757b99afcc6fed8e1270e915dbcb25&mpshare=1&scene=23&srcid=1001DxwdQpiMwea74mczpSw8#rd) - [Android实战——GreenDao3.2的使用,爱不释手](https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA) +- [Realm for Android详细教程](http://www.jianshu.com/p/28912c2f31db#) From 2932dcf5319a4d0400558f79fa62125b81652952 Mon Sep 17 00:00:00 2001 From: linsir Date: Thu, 26 Oct 2017 10:28:38 +0800 Subject: [PATCH 22/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20?= =?UTF-8?q?=E7=BB=99=20Android=20=E5=BC=80=E5=8F=91=E8=80=85=E7=9A=84=20Rx?= =?UTF-8?q?Java=20=E8=AF=A6=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 448d1c9..cfed536 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android图像处理 - 高斯模糊的原理及实现](https://mp.weixin.qq.com/s?__biz=MzI2MTU3MTE4NQ==&mid=2247483896&idx=1&sn=50c61e2c78aa610a1944be6a89bd75e5&chksm=ea5916e6dd2e9ff0a62af64c7f345ffb5c6dafdb65847b757b99afcc6fed8e1270e915dbcb25&mpshare=1&scene=23&srcid=1001DxwdQpiMwea74mczpSw8#rd) - [Android实战——GreenDao3.2的使用,爱不释手](https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA) - [Realm for Android详细教程](http://www.jianshu.com/p/28912c2f31db#) +- [给 Android 开发者的 RxJava 详解](http://gank.io/post/560e15be2dca930e00da1083) From 3b8cfdc1ce0486bf7a84284289ca03e072917d7e Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 30 Oct 2017 12:09:56 +0800 Subject: [PATCH 23/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20An?= =?UTF-8?q?droid=20=E8=B0=88=E8=B0=88=E8=87=AA=E5=8A=A8=E5=8C=96=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cfed536..a9f4c70 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android实战——GreenDao3.2的使用,爱不释手](https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA) - [Realm for Android详细教程](http://www.jianshu.com/p/28912c2f31db#) - [给 Android 开发者的 RxJava 详解](http://gank.io/post/560e15be2dca930e00da1083) +- [Android 谈谈自动化测试](https://mp.weixin.qq.com/s/-0e1wd2iveQPMWgGFcmOwQ) From 9fa8f33f06078e4daa0fe089ecb2295050556f61 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 30 Oct 2017 15:14:09 +0800 Subject: [PATCH 24/95] =?UTF-8?q?=E6=8C=81=E7=BB=AD=E9=9B=86=E6=88=90?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=80=BB=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\347\233\256\346\200\273\347\273\2233.md" | 481 ++++++++++++++++++ 1 file changed, 481 insertions(+) create mode 100644 "AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" diff --git "a/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" "b/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" new file mode 100644 index 0000000..6bf38f6 --- /dev/null +++ "b/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" @@ -0,0 +1,481 @@ +# Android项目总结3 + +> 最近又独立开发了一个公司内部的小app,现在的感觉就是每一次独立开发一个新的app,都会遇到不同的问题,也都能独立解决这些问题。感觉这个状态还可以吧,同时打算把这些问题记录一下,以后再遇到同样问题的时候,有一个可以查阅的资料,也能帮助其它遇到同样问题的小伙伴们吧。 + + +- 本次项目采用的网络框架:rxjava + retrofit2,这个就不在这里总结了,有空会单独总结一篇有关文章的。 + +- 获取屏幕宽度 + +```java +public int getScreenWidth(){ + WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + int height = dm.heightPixels; // 屏幕高度(像素) + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240) + // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度 + int screenWidth = (int) (width / density); // 屏幕宽度(dp) + int screenHeight = (int) (height / density);// 屏幕高度(dp) + return width; + } +``` + +- 获取屏幕高度 + +```java +public int getScreenHeight(){ + WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics dm = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(dm); + int width = dm.widthPixels; // 屏幕宽度(像素) + int height = dm.heightPixels; // 屏幕高度(像素) + float density = dm.density; // 屏幕密度(0.75 / 1.0 / 1.5) + int densityDpi = dm.densityDpi; // 屏幕密度dpi(120 / 160 / 240) + // 屏幕宽度算法:屏幕宽度(像素)/屏幕密度 + int screenWidth = (int) (width / density); // 屏幕宽度(dp) + int screenHeight = (int) (height / density);// 屏幕高度(dp) + getAndroiodScreenProperty(); + return height; + } +``` + +- 获取进程名称 + +```java +private static String getProcessName(int pid) { + BufferedReader reader = null; + try { + reader = new BufferedReader(new FileReader("/proc/" + pid + "/cmdline")); + String processName = reader.readLine(); + if (!TextUtils.isEmpty(processName)) { + processName = processName.trim(); + } + return processName; + } catch (Throwable throwable) { + throwable.printStackTrace(); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (IOException exception) { + exception.printStackTrace(); + } + } + return null; + } +``` + +- 不能滑动的ViewPager + +```java +public class NoScrollViewPager extends ViewPager { + private boolean noScroll = true; + + public NoScrollViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NoScrollViewPager(Context context) { + super(context); + } + + public void setNoScroll(boolean noScroll) { + this.noScroll = noScroll; + } + + @Override + public void scrollTo(int x, int y) { + super.scrollTo(x, y); + } + + @Override + public boolean onTouchEvent(MotionEvent arg0) { + if (noScroll) + return false; + else + return super.onTouchEvent(arg0); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent arg0) { + if (noScroll) + return false; + else + return super.onInterceptTouchEvent(arg0); + } + + @Override + public void setCurrentItem(int item, boolean smoothScroll) { + super.setCurrentItem(item, smoothScroll); + } + + @Override + + public void setCurrentItem(int item) { + + super.setCurrentItem(item, false);//表示切换的时候,不需要切换时间。 + + } + +} +``` + +- 自定义loadingView + +LoadingBase.java + +```java +public abstract class LoadingBase extends View { + + public LoadingBase(Context context) { + this(context, null); + } + + public LoadingBase(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public LoadingBase(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + InitPaint(); + } + + public void startAnim() { + stopAnim(); + startViewAnim(0f, 1f, 500); + } + + public void startAnim(int time) { + stopAnim(); + startViewAnim(0f, 1f, time); + } + + + public void stopAnim() { + if (valueAnimator != null) { + clearAnimation(); + + valueAnimator.setRepeatCount(0); + valueAnimator.cancel(); + valueAnimator.end(); + if (OnStopAnim() == 0) { + valueAnimator.setRepeatCount(0); + valueAnimator.cancel(); + valueAnimator.end(); + } + + } + } + + public ValueAnimator valueAnimator; + + private ValueAnimator startViewAnim(float startF, final float endF, long time) { + valueAnimator = ValueAnimator.ofFloat(startF, endF); + valueAnimator.setDuration(time); + valueAnimator.setInterpolator(new LinearInterpolator()); + + + valueAnimator.setRepeatCount(SetAnimRepeatCount()); + + + + if (ValueAnimator.RESTART == SetAnimRepeatMode()) { + valueAnimator.setRepeatMode(ValueAnimator.RESTART); + + } else if (ValueAnimator.REVERSE == SetAnimRepeatMode()) { + valueAnimator.setRepeatMode(ValueAnimator.REVERSE); + + } + + valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + OnAnimationUpdate(valueAnimator); + + } + }); + valueAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + + } + + @Override + public void onAnimationStart(Animator animation) { + + super.onAnimationStart(animation); + } + + @Override + public void onAnimationRepeat(Animator animation) { + super.onAnimationRepeat(animation); + OnAnimationRepeat(animation); + } + }); + if (!valueAnimator.isRunning()) { + AinmIsRunning(); + valueAnimator.start(); + + } + + return valueAnimator; + } + + + protected abstract void InitPaint(); + + protected abstract void OnAnimationUpdate(ValueAnimator valueAnimator); + + protected abstract void OnAnimationRepeat(Animator animation); + + protected abstract int OnStopAnim(); + + protected abstract int SetAnimRepeatMode(); + + protected abstract int SetAnimRepeatCount(); + + protected abstract void AinmIsRunning(); + + + public int dip2px(float dpValue) { + final float scale = getContext().getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + public float getFontlength(Paint paint, String str) { + Rect rect = new Rect(); + paint.getTextBounds(str, 0, str.length(), rect); + return rect.width(); + } + + public float getFontHeight(Paint paint, String str) { + Rect rect = new Rect(); + paint.getTextBounds(str, 0, str.length(), rect); + return rect.height(); + + } + + public float getFontHeight(Paint paint) { + Paint.FontMetrics fm = paint.getFontMetrics(); + return fm.descent - fm.ascent; + } + +} + +``` + +LoadingView.java + +```java +public class LoadingView extends LoadingBase { + + private Paint mPaint; + private Paint mPaintPro; + + private float mWidth = 0f; + private float mPadding = 0f; + private float startAngle = 0f; + RectF rectF = new RectF(); + + public LoadingView(Context context) { + super(context); + } + + public LoadingView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LoadingView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + if (getMeasuredWidth() > getHeight()) + mWidth = getMeasuredHeight(); + else + mWidth = getMeasuredWidth(); + mPadding = 5; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2 - mPadding, mPaintPro); + rectF = new RectF(mPadding, mPadding, mWidth - mPadding, mWidth - mPadding); + canvas.drawArc(rectF, startAngle, 100 + , false, mPaint);//第四个参数是否显示半径 + + } + + + private void initPaint() { + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setColor(Color.WHITE); + mPaint.setStrokeWidth(8); + + mPaintPro = new Paint(); + mPaintPro.setAntiAlias(true); + mPaintPro.setStyle(Paint.Style.STROKE); + mPaintPro.setColor(Color.argb(100, 255, 255, 255)); + mPaintPro.setStrokeWidth(8); + + } + + + public void setViewColor(int color) { + mPaintPro.setColor(color); + postInvalidate(); + } + + public void setBarColor(int color) { + mPaint.setColor(color); + postInvalidate(); + } + + + @Override + protected void InitPaint() { + initPaint(); + } + + @Override + protected void OnAnimationUpdate(ValueAnimator valueAnimator) { + float value = (float) valueAnimator.getAnimatedValue(); + startAngle = 360 * value; + + invalidate(); + } + + @Override + protected void OnAnimationRepeat(Animator animation) { + + } + + @Override + protected int OnStopAnim() { + return 0; + } + + @Override + protected int SetAnimRepeatMode() { + return ValueAnimator.RESTART; + } + + @Override + protected void AinmIsRunning() { + + } + + @Override + protected int SetAnimRepeatCount() { + return ValueAnimator.INFINITE; + } + +} + +``` + + +- 自定义异常 + +```java +public class NetworkException extends RuntimeException { + + + + public static final int REQUEST_OK = 100; + public static final int REQUEST_FAIL = 101; + public static final int METHOD_NOT_ALLOWED = 102; + public static final int PARAMETER_ERROR = 103; + public static final int UID_OR_PWD_ERROR = 104; + public static final int SERVER_INTERNAL_ERROR = 105; + public static final int REQUEST_TIMEOUT = 106; + public static final int CONNECTION_ERROR = 107; + public static final int VERIFY_EXPIRED = 108; + public static final int NO_DATA = 109; + + + public NetworkException(int resultCode) { + this(getNetworkExceptionMessage(resultCode)); + } + + public NetworkException(String detailMessage) { + super(detailMessage); + } + + /** + * 将结果码转换成对应的文本信息 + */ + private static String getNetworkExceptionMessage(int code) { + String message = ""; + switch (code) { + case REQUEST_OK: + message = "请求成功"; + break; + case REQUEST_FAIL: + message = "请求失败"; + break; + + case METHOD_NOT_ALLOWED: + message = "请求方式不允许"; + break; + case PARAMETER_ERROR: + message = "用户不存在"; + break; + case UID_OR_PWD_ERROR: + message = "用户名或密码错误"; + break; + case SERVER_INTERNAL_ERROR: + message = "服务器内部错误"; + break; + case REQUEST_TIMEOUT: + message = "请求超时"; + break; + case CONNECTION_ERROR: + message = "连接错误"; + break; + case VERIFY_EXPIRED: + message = "验证过期"; + break; + case NO_DATA: + message = "没有数据"; + break; + case 110: + message = "该用户已存在"; + break; + default: + message = "未知错误"; + } + return message; + } + +} + +``` + +- 自定义OnClickListener防止重复点击发生的问题 + +```java +public static final int MIN_CLICK_DELAY_TIME = 1000; + private long lastClickTime = 0; + + @Override + public void onClick(View v) { + long time = System.currentTimeMillis(); + if (time - lastClickTime > MIN_CLICK_DELAY_TIME) { + lastClickTime = time; + } + } +``` From facc78ec1e4bca260414917c0b38d8eada24a797 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 30 Oct 2017 16:22:15 +0800 Subject: [PATCH 25/95] =?UTF-8?q?android=E9=A1=B9=E7=9B=AE=E6=80=BB?= =?UTF-8?q?=E7=BB=93=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\347\233\256\346\200\273\347\273\2233.md" | 490 +++++++++++++++++- 1 file changed, 489 insertions(+), 1 deletion(-) diff --git "a/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" "b/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" index 6bf38f6..73c34e7 100644 --- "a/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" +++ "b/AndroidNote/Android\350\277\233\351\230\266/Android\351\241\271\347\233\256\346\200\273\347\273\2233.md" @@ -468,7 +468,9 @@ public class NetworkException extends RuntimeException { - 自定义OnClickListener防止重复点击发生的问题 ```java -public static final int MIN_CLICK_DELAY_TIME = 1000; +public abstract class NoDoubleClickListener implements View.OnClickListener { + + private static final int MIN_CLICK_DELAY_TIME = 1000; private long lastClickTime = 0; @Override @@ -476,6 +478,492 @@ public static final int MIN_CLICK_DELAY_TIME = 1000; long time = System.currentTimeMillis(); if (time - lastClickTime > MIN_CLICK_DELAY_TIME) { lastClickTime = time; + onNoDoubleClick(v); + } + + } + public abstract void onNoDoubleClick(View v); +} +``` + +- 创建notification并且添加点击事件 + +```java +PendingIntent mainPendingIntent = null; + +Intent mainIntent = new Intent(this, MainActivity.class); +mainPendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + + NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); + mBuilder.setContentTitle("您有新的订单,请登陆app查看")//设置通知栏标题 + .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图 + // .setNumber(number) //设置通知集合的数量 + .setTicker("您有新的订单,请登陆app查看") //通知首次出现在通知栏,带上升动画效果的 + .setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间 + .setContentIntent(mainPendingIntent) + .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级 + .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消 + .setOngoing(false)//ture,设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接) + .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合 + //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission + .setSmallIcon(R.mipmap.ic_launcher);//设置通知小ICON + + + mNotificationManager.notify(1, mBuilder.build()); +``` + + +- 获取Imei,兼容Android N(easypermission) + +```java +public class LoginActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { + + private String imei = "00000000000"; + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + String[] perms = {android.Manifest.permission.READ_PHONE_STATE}; + if (EasyPermissions.hasPermissions(this, perms)) { + Log.e("lin", "---lin---> imie if"); + TelephonyManager telephonyManager = (TelephonyManager) this.getApplicationContext().getSystemService(this.getApplicationContext().TELEPHONY_SERVICE); + imei = telephonyManager.getDeviceId(); + } else { + Log.e("lin", "---lin---> imie else"); + EasyPermissions.requestPermissions(this, "正在申请获取手机唯一编码", + 100, perms); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + // Forward results to EasyPermissions + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); + } + + @Override + public void onPermissionsGranted(int requestCode, List perms) { + TelephonyManager telephonyManager = (TelephonyManager) this.getApplicationContext().getSystemService(this.getApplicationContext().TELEPHONY_SERVICE); + imei = telephonyManager.getDeviceId(); + } + + @Override + public void onPermissionsDenied(int requestCode, List perms) { + + } + +} +``` + +- 倒计时控件 + +```java +private TimeCount mTimeCount; +mTimeCount = new TimeCount(60000, 1000); +mTimeCount.start(); + +class TimeCount extends CountDownTimer { + public TimeCount(long millisInFuture, long countDownInterval) { + super(millisInFuture + 200 , countDownInterval); + } + + @Override + public void onFinish() {// 计时完毕 + tvGetCodeActivityLogin.setText("获取验证码"); + tvGetCodeActivityLogin.setClickable(true); + } + + + @Override + public void onTick(long millisUntilFinished) {// 计时过程 + long time = millisUntilFinished / 1000; + String timeString = String.valueOf(time); + timeString = timeString + "S"; + tvGetCodeActivityLogin.setText(timeString); + tvGetCodeActivityLogin.setClickable(false);//防止重复点击 + } +} +``` + +- 设置editext hint字的颜色值 + +```java +CharSequence hint = edtAuthCodeActivityLogin.getHint(); +SpannableString ss = new SpannableString(hint); +AbsoluteSizeSpan ass = new AbsoluteSizeSpan(17, true); +edtAuthCodeActivityLogin.setHintTextColor(0xffdddddd); +ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); +edtAuthCodeActivityLogin.setHint(new SpannedString("短信验证码")); +``` + +- App内采用的开源相册 Album + +- 图片压缩框架 Luban + +- fragment类似activity的onResume() +```java +protected boolean isCreate = false; + +@Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (isVisibleToUser && isCreate) { + getOrderList("-1"); + } + } +``` + +- 利用反射设置tablayout下划线长度 + +```java +tabLayoutOrderFragment.post(new Runnable() { + @Override + public void run() { + setIndicator(tabLayoutOrderFragment,20,20); + } + }); + +public void setIndicator(TabLayout tabs, int leftDip, int rightDip) { + Class tabLayout = tabs.getClass(); + Field tabStrip = null; + try { + tabStrip = tabLayout.getDeclaredField("mTabStrip"); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } + + tabStrip.setAccessible(true); + LinearLayout llTab = null; + try { + llTab = (LinearLayout) tabStrip.get(tabs); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics()); + int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics()); + + for (int i = 0; i < llTab.getChildCount(); i++) { + View child = llTab.getChildAt(i); + child.setPadding(0, 0, 0, 0); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1); + params.leftMargin = left; + params.rightMargin = right; + child.setLayoutParams(params); + child.invalidate(); + } + + } +``` + +- 封装一个链式调用的dialog + +```java +public class DialogUtils { + + private Context mContext; + private AlertDialog mAlertDialog; + private DialogUtils.Builder mBuilder; + private boolean mHasShow = false; + private String mTitle; + private String mMessage; + private int messageColor = -1; + private SingleButtonCallback mPositiveCallback; + private SingleButtonCallback mNegativeCallback = new SingleButtonCallback() { + @Override + public void onClick(@NonNull DialogUtils dialog, View.OnClickListener listener) { + dismiss(); + } + }; + private boolean mCancel; + + + public DialogUtils(Context context) { + this.mContext = context; + } + + public void show() { + if (!mHasShow) { + mBuilder = new Builder(); + } else { + mAlertDialog.show(); + } + mHasShow = true; + } + + public void dismiss() { + mAlertDialog.dismiss(); + } + + public DialogUtils setTitle(String title) { + this.mTitle = title; + if (mBuilder != null) { + mBuilder.setTitle(title); + } + return this; + } + + public DialogUtils setMessage(String message) { + this.mMessage = message; + if (mBuilder != null) { + mBuilder.setMessage(message); + } + return this; + } + + public DialogUtils setMessageColor(int color) { + this.messageColor = color; + return this; + } + + public DialogUtils setCanceledOnTouchOutside(boolean cancel) { + this.mCancel = cancel; + if (mBuilder != null) { + mBuilder.setCanceledOnTouchOutside(mCancel); + } + return this; + } + + public DialogUtils setPositive(SingleButtonCallback positiveCallback) { + this.mPositiveCallback = positiveCallback; + return this; + } + + public DialogUtils setNegative(SingleButtonCallback negativeCallback) { + this.mNegativeCallback = negativeCallback; + return this; + } + + + public enum DialogAction { + POSITIVE, + NEGATIVE + } + + public interface SingleButtonCallback { + void onClick(@NonNull DialogUtils dialog, View.OnClickListener listener); + } + + + private class Builder { + + private TextView mTitleView; + private TextView mMessageView; + private TextView mPositive, mNegative; + private Window mAlertDialogWindow; + private RelativeLayout mDialog; + + private Builder() { + mAlertDialog = new AlertDialog.Builder(mContext, R.style.Theme_AppCompat_Dialog).create(); + mAlertDialog.show(); + mAlertDialog.getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + mAlertDialog.getWindow() + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE); + + mAlertDialogWindow = mAlertDialog.getWindow(); + mAlertDialogWindow.setBackgroundDrawable( + new ColorDrawable(android.graphics.Color.TRANSPARENT)); + View contentView = LayoutInflater.from(mContext) + .inflate(R.layout.dialog_util_layout, null); + contentView.setFocusable(true); + contentView.setFocusableInTouchMode(true); + mAlertDialogWindow.setBackgroundDrawableResource(R.drawable.material_dialog_window); + mAlertDialogWindow.setContentView(contentView); + mTitleView = (TextView) mAlertDialogWindow.findViewById(R.id.tv_title); + mMessageView = (TextView) mAlertDialogWindow.findViewById(R.id.tv_hint); + mPositive = (TextView) mAlertDialogWindow.findViewById(R.id.tv_sure); + mNegative = (TextView) mAlertDialogWindow.findViewById(R.id.tv_cancel); + mDialog = (RelativeLayout) mAlertDialogWindow.findViewById(R.id.dialog); + Log.i("lin", "----lin----> 宽 " + MyApplication.get().getScreenWidth()); + Log.i("lin", "----lin----> 高 " + MyApplication.get().getScreenHeight()); + + mDialog.setLayoutParams(new RelativeLayout.LayoutParams(MyApplication.get().getScreenWidth() / 4 * 3, MyApplication.get().getScreenHeight() / 4)); + if (mTitle != null) { + mTitleView.setText(mTitle); + } + if (mMessage != null) { + mMessageView.setText(mMessage); + } + if (messageColor != -1) { + mMessageView.setTextColor(messageColor); + } + mAlertDialog.setCanceledOnTouchOutside(mCancel); + mAlertDialog.setCancelable(mCancel); + if (mPositiveCallback != null) { + mPositive.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mPositiveCallback.onClick(DialogUtils.this, this); + } + }); + } + if (mNegativeCallback != null) { + mNegative.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mNegativeCallback.onClick(DialogUtils.this, this); + } + }); + } + + } + + + public void setTitle(String title) { + mTitleView.setText(title); + } + + public void setMessage(String message) { + if (mMessageView != null) { + mMessageView.setText(message); + } + } + + public void setCanceledOnTouchOutside(boolean canceledOnTouchOutside) { + mAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside); + mAlertDialog.setCancelable(canceledOnTouchOutside); + } + + } + +} +``` + +- 将loadingView封装成loadingViewDialog + +```java +public class LoadingUtils { + + + private Context mContext; + private AlertDialog mAlertDialog; + private LoadingUtils.Builder mBuilder; + private boolean mHasShow = false; + private String mMessage; + private boolean mCancel; + + + public LoadingUtils(Context context) { + this.mContext = context; + } + + public void show() { + if (!mHasShow) { + mBuilder = new LoadingUtils.Builder(); + } else { + mAlertDialog.show(); + } + mHasShow = true; + } + + public void dismiss() { + mAlertDialog.dismiss(); + } + + + public LoadingUtils setMessage(String message) { + this.mMessage = message; + if (mBuilder != null) { + mBuilder.setMessage(message); + } + return this; + } + + public LoadingUtils setCanceledOnTouchOutside(boolean cancel) { + this.mCancel = cancel; + if (mBuilder != null) { + mBuilder.setCanceledOnTouchOutside(mCancel); + } + return this; + } + + private class Builder { + + private Window mAlertDialogWindow; + private TextView mMessageView; + private RelativeLayout mDialog; + private LoadingView loadingView; + + private Builder() { + mAlertDialog = new AlertDialog.Builder(mContext, R.style.Theme_AppCompat_Dialog).create(); + mAlertDialog.show(); + mAlertDialog.getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + mAlertDialog.getWindow() + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE); + + mAlertDialogWindow = mAlertDialog.getWindow(); + mAlertDialogWindow.setBackgroundDrawable( + new ColorDrawable(android.graphics.Color.TRANSPARENT)); + View contentView = LayoutInflater.from(mContext) + .inflate(R.layout.loading_view_layout, null); + contentView.setFocusable(true); + contentView.setFocusableInTouchMode(true); + mAlertDialogWindow.setBackgroundDrawableResource(R.drawable.material_dialog_window); + mAlertDialogWindow.setContentView(contentView); + mDialog = (RelativeLayout) contentView.findViewById(R.id.rl_loading_view); + mMessageView = (TextView) contentView.findViewById(R.id.tv_hint); + loadingView = (LoadingView) contentView.findViewById(R.id.loading_view); + + loadingView.setViewColor(Color.argb(100, 255, 255, 255)); + loadingView.startAnim(); + loadingView.setBarColor(0xFF42a5f5); + loadingView.startAnim(); + + + Log.i("lin", "----lin----> 宽 " + MyApplication.get().getScreenWidth()); + Log.i("lin", "----lin----> 高 " + MyApplication.get().getScreenHeight()); + + mDialog.setLayoutParams(new FrameLayout.LayoutParams(MyApplication.get().getScreenWidth() / 4 * 3, MyApplication.get().getScreenHeight() / 4)); + + if (mMessage != null) { + mMessageView.setText(mMessage); + } + mAlertDialog.setCanceledOnTouchOutside(mCancel); + mAlertDialog.setCancelable(mCancel); + } + + + public void setMessage(String message) { + if (mMessageView != null) { + mMessageView.setText(message); + } + } + + public void setCanceledOnTouchOutside(boolean canceledOnTouchOutside) { + mAlertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside); + mAlertDialog.setCancelable(canceledOnTouchOutside); + } + + } + +} + +``` + +- 判断当前app是否有网络 +```java +public static boolean isNetworkAvailable(Context context) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (cm == null) { + + } else { + NetworkInfo[] info = cm.getAllNetworkInfo(); + if (info != null) { + for (int i = 0; i < info.length; i++) { + if (info[i].getState() == NetworkInfo.State.CONNECTED) { + return true; + } + } + } } + return false; } ``` From 3d143d3d43f41d026d2e5010bbc7240dbdaaee51 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 31 Oct 2017 10:07:38 +0800 Subject: [PATCH 26/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20An?= =?UTF-8?q?droid=20Studio=203.0=20=E6=96=B0=E5=8A=9F=E8=83=BD=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=92=8C=E6=97=A7=E9=A1=B9=E7=9B=AE=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a9f4c70..f4d3852 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### 编译器相关 +- [Android Studio 3.0 新功能解析和旧项目适配](https://mp.weixin.qq.com/s/met0fke7rKumb7Nlb5hxpA) - [Android-studio使用教程1](/AndroidNote/Android编译器相关/AndroidStudio使用教程(第一弹).md) - [Android-studio使用教程2](/AndroidNote/Android编译器相关/AndroidStudio使用教程(第二弹).md) - [Android-studio使用教程3](/AndroidNote/Android编译器相关/AndroidStudio使用教程(第三弹).md) From 35eddc8b8b1d12114eaf892f41c1254115a7e7bd Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 31 Oct 2017 21:11:36 +0800 Subject: [PATCH 27/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20?= =?UTF-8?q?=E6=A3=80=E6=9F=A5app=E6=98=AF=E5=90=A6=E5=85=B7=E6=9C=89?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=A0=8F=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...50\351\200\201\346\235\203\351\231\220.md" | 52 +++++++++++++++++++ README.md | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 "AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" diff --git "a/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" "b/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" new file mode 100644 index 0000000..f5e8f50 --- /dev/null +++ "b/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" @@ -0,0 +1,52 @@ +# 检查app是否具有推送权限 + +检查是否有推送权限 + +```java +@RequiresApi(api = Build.VERSION_CODES.KITKAT) + private boolean isNotificationEnabled(Context context) { + + String CHECK_OP_NO_THROW = "checkOpNoThrow"; + String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; + + AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = context.getApplicationInfo(); + String pkg = context.getApplicationContext().getPackageName(); + int uid = appInfo.uid; + + Class appOpsClass = null; + /* Context.APP_OPS_MANAGER */ + try { + appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, + String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); + + int value = (Integer) opPostNotificationValue.get(Integer.class); + return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +``` + + +跳转到登录页面 + +```java +private void toSetting() { + Intent localIntent = new Intent(); + localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (Build.VERSION.SDK_INT >= 9) { + localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + localIntent.setData(Uri.fromParts("package", getPackageName(), null)); + } else if (Build.VERSION.SDK_INT <= 8) { + localIntent.setAction(Intent.ACTION_VIEW); + localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails"); + localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName()); + } + startActivity(localIntent); +} +``` diff --git a/README.md b/README.md index f4d3852..d0c6b24 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Realm for Android详细教程](http://www.jianshu.com/p/28912c2f31db#) - [给 Android 开发者的 RxJava 详解](http://gank.io/post/560e15be2dca930e00da1083) - [Android 谈谈自动化测试](https://mp.weixin.qq.com/s/-0e1wd2iveQPMWgGFcmOwQ) - +- [检查app是否具有通知栏权限](/AndroidNote/Android进阶/检查app是否有推送权限.md) ### 自定义View From 461959759fab8007f983c6aa053b3c5a74dde863 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 3 Nov 2017 19:32:28 +0800 Subject: [PATCH 28/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E6=96=87=E7=AB=A0An?= =?UTF-8?q?droid=E4=B8=AD=E5=9B=BE=E7=89=87=E5=8E=8B=E7=BC=A9=E5=88=86?= =?UTF-8?q?=E6=9E=90=EF=BC=88=E4=B8=8A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" | 1 + README.md | 2 ++ 2 files changed, 3 insertions(+) diff --git "a/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" "b/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" index f5e8f50..968dd23 100644 --- "a/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" +++ "b/AndroidNote/Android\350\277\233\351\230\266/\346\243\200\346\237\245app\346\230\257\345\220\246\346\234\211\346\216\250\351\200\201\346\235\203\351\231\220.md" @@ -36,6 +36,7 @@ 跳转到登录页面 ```java + private void toSetting() { Intent localIntent = new Intent(); localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); diff --git a/README.md b/README.md index d0c6b24..3c7a9ea 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [给 Android 开发者的 RxJava 详解](http://gank.io/post/560e15be2dca930e00da1083) - [Android 谈谈自动化测试](https://mp.weixin.qq.com/s/-0e1wd2iveQPMWgGFcmOwQ) - [检查app是否具有通知栏权限](/AndroidNote/Android进阶/检查app是否有推送权限.md) +- [Android中图片压缩分析(上)](https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg) + ### 自定义View From 9165286bd3dce2a0a78a46b1dabf3e593c68ea6b Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 3 Nov 2017 19:38:41 +0800 Subject: [PATCH 29/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E6=96=87=E7=AB=A0=20Android=20Studio3.0=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B9=8B=E8=B7=AF=EF=BC=88=E9=81=87=E5=9D=91=E5=BF=85=E5=85=A5?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3c7a9ea..e1ebb87 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android 谈谈自动化测试](https://mp.weixin.qq.com/s/-0e1wd2iveQPMWgGFcmOwQ) - [检查app是否具有通知栏权限](/AndroidNote/Android进阶/检查app是否有推送权限.md) - [Android中图片压缩分析(上)](https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg) - +- [Android Studio3.0更新之路(遇坑必入)](http://www.jianshu.com/p/15afb8234d19) ### 自定义View From 84b590df320052e644c447c712ed85021a1ef301 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 3 Nov 2017 19:40:50 +0800 Subject: [PATCH 30/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=96=87?= =?UTF-8?q?=E7=AB=A0=20Android=20Studio3.0=E6=AD=A3=E5=BC=8F=E7=89=88?= =?UTF-8?q?=E5=A1=AB=E5=9D=91=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e1ebb87..8889d31 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [检查app是否具有通知栏权限](/AndroidNote/Android进阶/检查app是否有推送权限.md) - [Android中图片压缩分析(上)](https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg) - [Android Studio3.0更新之路(遇坑必入)](http://www.jianshu.com/p/15afb8234d19) +- [Android Studio3.0正式版填坑路](http://www.jianshu.com/p/9b25087a5d7d) + ### 自定义View From 4b49e36aff12f834a1c131f16c99d66545451f7d Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 7 Nov 2017 11:54:28 +0800 Subject: [PATCH 31/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0linux/Android=20GitLabC?= =?UTF-8?q?i=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...droid-GitLabCi\351\205\215\347\275\256.md" | 243 ++++++++++++++++++ README.md | 6 + 2 files changed, 249 insertions(+) create mode 100644 "Linux/Android-GitLabCi\351\205\215\347\275\256.md" diff --git "a/Linux/Android-GitLabCi\351\205\215\347\275\256.md" "b/Linux/Android-GitLabCi\351\205\215\347\275\256.md" new file mode 100644 index 0000000..d3f4c5b --- /dev/null +++ "b/Linux/Android-GitLabCi\351\205\215\347\275\256.md" @@ -0,0 +1,243 @@ +# Android GitLabCi的配置 + +> 近期接到了这样一个小任务,由于在测试过程中我们需要经常打包apk,这个任务量说大不大说小也不小吧,然后决定配置一个ci,让 gitlab自动来做这件事情。 + +## 服务器环境 + +服务器:centos7 + +## 任务列表 + +- 安装open JDK +- 安装sdk +- 安装gradle +- 安装gitlab-ci-multi-runner + +### 安装jdk + +``` +yum search java-1.8.0 +yum install java-1.8.0-openjdk.x86_64 +``` + +查看安装结果: +``` +# java -version + +openjdk version "1.8.0_131" +OpenJDK Runtime Environment (build 1.8.0_131-b12) +OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode) +``` + +配置环境变量: +在当前用户的bash_profile或者/etc/profile配置一下环境变量和JAVA_HOME +eg: +``` +export JAVA_HOME=/opt/soft/java +export CLASSPATH=:/lib:/jre/lib +export PATH=$PATH:$JAVA_HOME/bin +``` +``source profile`` 让配置立即生效 + + +### 安装sdk + +现在sdk都是由apkmanager统一管理的 + +下载sdktools + +``` +cd /opt + +mkdir androidSdk + +wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip + +unzip sdk-tools-linux-3859397.zip +``` + +在/opt/androidsdk/tools/bin下面有sdkmanager的命令,我们可以利用``sdkmanager --list``查看我们已经安装的内容,还可以用例如这样的命令``sdkmanager build-tools;19.1.0``,来安装我们需要的内容。装完之后我们还是要习惯性的``sdkmanager --licenses``看一下有没有没有同意的licenses. + +配置sdk环境变量 + +``` +PATH=$PATH:/opt/androidsdk/tools/bin +PATH=$PATH:/opt/androidsdk/platform-tools +export PATH +export ANDROID_HOME=/opt/androidsdk +export ANDROID_NDK_HOME=/opt/androidsdk/ndk-bundle +``` +``source profile`` 让配置立即生效 + + +运行``adb version`` + +``` +Android Debug Bridge version 1.0.39 +Revision 3db08f2c6889-android +Installed as /opt/androidsdk/platform-tools/adb +``` + +如果看到以上内容,就代表成功了。 + + + + +### 安装gradle + +创建gradle目录解压并安装 + +``` +cd /opt +mkdir gradle +cd gradle +wget https://services.gradle.org/distributions/gradle-4.0.1-bin.zip +unzip gradle-4.0.1-bin.zip +``` + +配置环境变量(可以在/etc/profile下面配置,也可以在用户的bash_profile下面配置) +``` +PATH=$PATH:/opt/androidsdk/tools/bin +PATH=$PATH:/opt/gradle/gradle-4.0.1/bin +PATH=$PATH:/opt/androidsdk/platform-tools +export PATH + +export ANDROID_HOME=/opt/androidsdk +export ANDROID_NDK_HOME=/opt/androidsdk/ndk-bundle +``` + +检查是否配置成功 +``` +gradle -version +``` + +### 安装gitlab-ci-multi-runner + +``` +yum install gitlab-ci-multi-runner +``` + +注册runner: + +``` +$ sudo gitlab-ci-multi-runner register + +Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) +https://mygitlab.com/ci +Please enter the gitlab-ci token for this runner +xxx-xxx-xxx +Please enter the gitlab-ci description for this runner +my-runner +INFO[0034] fcf5c619 Registering runner... succeeded +Please enter the executor: shell, docker, docker-ssh, ssh? +docker +Please enter the Docker image (eg. ruby:2.1): +node:4.5.0 +INFO[0037] Runner registered successfully. Feel free to start it, but if it's +running already the config should be automatically reloaded! +``` + +更新runner + +``` + # For Debian/Ubuntu + sudo apt-get update + sudo apt-get install gitlab-ci-multi-runner + + # For CentOS + sudo yum update + sudo yum install gitlab-ci-multi-runner +``` + +配置文件默认会在``/etc/gitlab-runner/config.toml`` + +简单配置: +``` +concurrent = 1 +check_interval = 0 +``` + +示例配置文件: +``` +[[runners]] + name = "test" + url = "http://your-domain.com/ci" + token = "your-token" + executor = "docker" + [runners.docker] + tls_verify = false + image = "node:4.5.0" + privileged = false + disable_cache = false + volumes = ["/cache"] + [runners.cache] + [runners.kubernetes] + host = "" + cert_file = "" + key_file = "" + ca_file = "" + image = "" + namespace = "" + privileged = false + cpus = "" + memory = "" + service_cpus = "" + service_memory = "" +``` + + +## 配置构建任务 + +在项目的根目录下,添加``.gitlab-ci.yml``文件, + +``` +image: openjdk:8-jdk +stages: + - build + - test +build: + tags: + - test-env + stage: build + script: + - ./gradlew assembleDebug + artifacts: + paths: + - app/build/outputs/ +``` + +这个就是简单的,build一下打包出一个debug版本的apk,当然我们还可以编辑出各种脚本,我们也可以在这里编写代码的测试的,这个都是可以的。 + +这里面有一个``tags:- test-env``的概念,这个就是决定我们要选择哪一个runner。 + + + +效果图: + +![](https://ws2.sinaimg.cn/large/006tKfTcly1fl9do2q6fvj31kw0ewgmn.jpg) + +![](https://ws3.sinaimg.cn/large/006tKfTcly1fl9dopk7rlj31kw1ien66.jpg) + +---- + +最后补充一下,我们本次是在centos7上面配置嘛,遇到了很多权限方面的问题,简单补充一下: + + +![权限](https://ws3.sinaimg.cn/large/006tKfTcly1fl9ddsdj99j30sa09ot9t.jpg) + +这里面是分成9位的,前三位是自己的权限,中间三位是同组人的权限,最后三位是其它人的权限。 +我们可以根据自己的实际情况进行分配权限,最大就是``chmod -777 xxx``这个就是最高级别的权限了,就是谁都可以动的了,大家要合理决定是否给出这么大权限,当然如果这是一个文件夹我们还可以加一个``-r``参数,这样就会递归分配它下面的目录。 + +我们也可以通过``chown -R --recursive``把文件夹的所有者分配给别人。 + + +### 参考 + +- [使用Gitlab搭建Android和iOS的持续集成和持续发布环境(二)](http://www.jianshu.com/p/a9bb0dd8d284) +- [Setting up GitLab CI for Android projects](https://about.gitlab.com/2016/11/30/setting-up-gitlab-ci-for-android-projects/) +- [劈荆斩棘:Gitlab 部署 CI 持续集成](http://www.cnblogs.com/xishuai/p/gitlab-ci.html) +- [GitLab-CI安装教程](http://blog.csdn.net/u013096666/article/details/76521426) +- [centos7中安装JDK](http://blog.devwiki.net/index.php/2017/07/20/centos-install-jdk.html) +- [centos7中安装Android SDK](http://blog.devwiki.net/index.php/2017/07/20/centos-install-android-sdk.html) +- [centos7中安装gradle](http://blog.devwiki.net/index.php/2017/07/20/centos-install-gradle.html) +- [gradle build提示You have not accepted the license agreements of the following SDK components](http://blog.csdn.net/xlyrh/article/details/54667633) diff --git a/README.md b/README.md index 8889d31..efc3a1a 100644 --- a/README.md +++ b/README.md @@ -170,6 +170,12 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [使用Android内置WebView打开TextView中的超链接](http://iluhcm.com/2016/07/06/how-to-open-a-hyperlink-using-app-webview-with-textview/) +---- + +## linux + +- [Android-GitLabCi配置.md](/Linux/Android-GitLabCi配置.md) + ---- ## Git教程 From da97b83dd2d95fdf173566a80aa0b842ca417522 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 7 Nov 2017 14:49:37 +0800 Subject: [PATCH 32/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E6=96=87?= =?UTF-8?q?=E7=AB=A0Android=E6=B7=B7=E5=90=88=E7=BC=96=E7=A8=8B=EF=BC=9AWe?= =?UTF-8?q?bView=E5=AE=9E=E8=B7=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index efc3a1a..29d7272 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android中图片压缩分析(上)](https://mp.weixin.qq.com/s/QZ-XTsO7WnNvpnbr3DWQmg) - [Android Studio3.0更新之路(遇坑必入)](http://www.jianshu.com/p/15afb8234d19) - [Android Studio3.0正式版填坑路](http://www.jianshu.com/p/9b25087a5d7d) +- [Android混合编程:WebView实践](https://juejin.im/post/59f17a7051882546d71e91a7) From 38caf70a389d6fc8f41cf045bda796f70ad2dbf0 Mon Sep 17 00:00:00 2001 From: linsir Date: Thu, 9 Nov 2017 15:32:10 +0800 Subject: [PATCH 33/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0spring=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9F=A5=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 29d7272..519e3e6 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [观察者模式](/JavaNote/设计模式相关/观察者模式.md) -### Java相关 +### Java基础相关 - [Java基础知识](/JavaNote/Java相关/Java基础知识.md) - [Java回调原理与实现1](/JavaNote/Java相关/Java回调的原理与实现.md) @@ -220,6 +220,13 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [JVM类加载器](/JavaNote/Java相关/JVM类加载器.md) - [Javase基础知识](https://github.com/francistao/LearningNotes/blob/master/Part2/JavaSE/Java基础知识.md) + + +### JavaEE相关 + +- [Spring入门教程](http://how2j.cn/k/spring/spring-ioc-di/87.html) +- [最全面的Spring学习笔记](https://www.cnblogs.com/wangyayun/p/6800902.html) + ---- From 4fbd288a4c7a6aa02e11c864f7b1468e8de7565e Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 10 Nov 2017 14:50:37 +0800 Subject: [PATCH 34/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Spring-boot=E5=85=A5?= =?UTF-8?q?=E9=97=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Spring-boot\345\205\245\351\227\250.md" | 23 +++++++++++++++++++ README.md | 1 + 2 files changed, 24 insertions(+) create mode 100644 "JavaNote/Javaee/Spring-boot\345\205\245\351\227\250.md" diff --git "a/JavaNote/Javaee/Spring-boot\345\205\245\351\227\250.md" "b/JavaNote/Javaee/Spring-boot\345\205\245\351\227\250.md" new file mode 100644 index 0000000..ba69c50 --- /dev/null +++ "b/JavaNote/Javaee/Spring-boot\345\205\245\351\227\250.md" @@ -0,0 +1,23 @@ +# Spiring-boot入门 + +> 最入门级别的Spring框架,省了很多配置的过程,比较适合初学者,或者微站的使用,所以打算从这里开始学起。 + +学习的地址:https://www.bysocket.com/?p=1627 + +包目录结构: + +![](https://ws1.sinaimg.cn/large/006tNc79ly1flcxydakxlj30km0zyt9d.jpg) + +这里面分了很多层,主要有的层就是,controller,dao,domain,service,Application。 + +SpringBoot的优势就在于它内置了TomCat,并且不需要过多的配置就可以直接使用,也不用配置Spring那一套。 + +这次实现的是springboot-restful的过程,rest是web的一种框架风格,主要用于前后端分离。 + +首先我们要实现一个controller,这里面负责拦截用户的url,然后可以设置是GET还是POST的方法,同时我们还需要实现一个dao层,这层是用来负责数据持久化的,简单说就是这里和数据进行的直接接触。接下来要实现一个domain层,这一层大家应该都能明白有的时候我们叫它model有的时候叫它bean,接下来就要实现service层了,这一层中我们需要定义一个接口,并且编写一个它的实现类就可以了,我们在controller中调用的便是这一层的内容。 + +其实我们的代码,以上便已经编写完成了,但是我们还有几个点是没有完成的,我们的sql语句还没有配置呢。我们需要在resources/mapper/CityMapper.xml内中写入。在resources/application.properties中写入数据库的信息,配置一下就好。 + +代码地址:https://github.com/linsir6/Javaee-Spring-demo + +博主在Spring方面也是刚刚起步的小菜鸟,写以上内容只是为了,记录学习笔记,要是有什么错误,欢迎大家提出指正。 diff --git a/README.md b/README.md index 519e3e6..25aff03 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Spring入门教程](http://how2j.cn/k/spring/spring-ioc-di/87.html) - [最全面的Spring学习笔记](https://www.cnblogs.com/wangyayun/p/6800902.html) +- [Spring-root入门](/JavaNote/Javaee/Spring-boot入门.md) ---- From 6ae01151f44db210309dc6858601a2e4a9389161 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 10 Nov 2017 20:02:12 +0800 Subject: [PATCH 35/95] =?UTF-8?q?Spring=20Boot=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=20=E2=80=93=20=E5=9C=A8=E5=9D=91=E4=B8=AD?= =?UTF-8?q?=E5=AE=9E=E8=B7=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 25aff03..b38ca5e 100644 --- a/README.md +++ b/README.md @@ -227,6 +227,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Spring入门教程](http://how2j.cn/k/spring/spring-ioc-di/87.html) - [最全面的Spring学习笔记](https://www.cnblogs.com/wangyayun/p/6800902.html) - [Spring-root入门](/JavaNote/Javaee/Spring-boot入门.md) +- [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) ---- From cd65a452eb65852ab009b37a4e545613e7ce3586 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 10 Nov 2017 20:19:38 +0800 Subject: [PATCH 36/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b38ca5e..5edcd8f 100644 --- a/README.md +++ b/README.md @@ -298,3 +298,4 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) += [理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html) From 79f14d9496acb95dd6c61d09695b13df45a452c4 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 10 Nov 2017 20:34:22 +0800 Subject: [PATCH 37/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=20Sp?= =?UTF-8?q?ring=20Boot=20=E4=B9=8B=20RESRful=20API=20=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5edcd8f..a9e0366 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [最全面的Spring学习笔记](https://www.cnblogs.com/wangyayun/p/6800902.html) - [Spring-root入门](/JavaNote/Javaee/Spring-boot入门.md) - [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) +- [Spring Boot 之 RESRful API 权限控制](https://www.bysocket.com/?p=1080) ---- @@ -298,4 +299,5 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) -= [理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html) +- [理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html +- [OAuth 2和JWT - 如何设计安全的API?](http://blog.csdn.net/ljinddlj/article/details/53108261) From 3e69cfd06fc6c839b43a647ca86b50691c646f30 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 10 Nov 2017 21:35:19 +0800 Subject: [PATCH 38/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E6=96=87=E7=AB=A0?= =?UTF-8?q?=20Spring=20Boot=20=E6=95=B4=E5=90=88=20Redis=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E7=BC=93=E5=AD=98=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a9e0366..13285f4 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Spring-root入门](/JavaNote/Javaee/Spring-boot入门.md) - [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) - [Spring Boot 之 RESRful API 权限控制](https://www.bysocket.com/?p=1080) +- [Spring Boot 整合 Redis 实现缓存操作](https://www.bysocket.com/?p=1756) ---- From e0088a66c9269bed21938c2abdafa9d93b1f1715 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 13 Nov 2017 13:20:19 +0800 Subject: [PATCH 39/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0spring=20boot=20?= =?UTF-8?q?=E5=AE=98=E7=BD=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 13285f4..006a012 100644 --- a/README.md +++ b/README.md @@ -230,6 +230,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) - [Spring Boot 之 RESRful API 权限控制](https://www.bysocket.com/?p=1080) - [Spring Boot 整合 Redis 实现缓存操作](https://www.bysocket.com/?p=1756) +- [Spring Boot 官方文档](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/) ---- From 8c6e53cc94041187404ebd722ac58f495be8f130 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 13 Nov 2017 13:21:54 +0800 Subject: [PATCH 40/95] =?UTF-8?q?=E6=B7=BB=E5=8A=A0spring=20boot=20?= =?UTF-8?q?=E5=AE=98=E7=BD=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 006a012..675d3b3 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) - [Spring Boot 之 RESRful API 权限控制](https://www.bysocket.com/?p=1080) - [Spring Boot 整合 Redis 实现缓存操作](https://www.bysocket.com/?p=1756) -- [Spring Boot 官方文档](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/) +- [Spring Boot 官方文档](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/  ) ---- From 5a8b8e6d4784100d741d77a3734a082e0a365e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Fri, 17 Nov 2017 11:48:50 +0800 Subject: [PATCH 41/95] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 675d3b3..96c259b 100644 --- a/README.md +++ b/README.md @@ -301,5 +301,5 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [浅析RPC协议](/网络协议/浅析RPC协议.md) - [浅析dubbo服务](/网络协议/浅析dubbo服务.md) - [SSH原理与应用](/网络协议/SSH原理与应用.md) -- [理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html +- [理解OAuth 2.0](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html) - [OAuth 2和JWT - 如何设计安全的API?](http://blog.csdn.net/ljinddlj/article/details/53108261) From 3b90d702a0de830791f027c7136ec0b0ef5ea5ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Fri, 17 Nov 2017 12:05:22 +0800 Subject: [PATCH 42/95] =?UTF-8?q?Update=20Java=E5=88=A9=E7=94=A8listener?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=9B=9E=E8=B0=83=EF=BC=8C=E5=8D=B3=E8=A7=82?= =?UTF-8?q?=E5=AF=9F=E8=80=85=E6=A8=A1=E5=BC=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\257\237\350\200\205\346\250\241\345\274\217.md" | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git "a/JavaNote/Java\347\233\270\345\205\263/Java\345\210\251\347\224\250listener\345\256\236\347\216\260\345\233\236\350\260\203\357\274\214\345\215\263\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" "b/JavaNote/Java\347\233\270\345\205\263/Java\345\210\251\347\224\250listener\345\256\236\347\216\260\345\233\236\350\260\203\357\274\214\345\215\263\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" index ca3f979..ee308e2 100644 --- "a/JavaNote/Java\347\233\270\345\205\263/Java\345\210\251\347\224\250listener\345\256\236\347\216\260\345\233\236\350\260\203\357\274\214\345\215\263\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" +++ "b/JavaNote/Java\347\233\270\345\205\263/Java\345\210\251\347\224\250listener\345\256\236\347\216\260\345\233\236\350\260\203\357\274\214\345\215\263\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" @@ -1,13 +1,15 @@ > java中实现观察者模式有很多种方式,上一篇文章介绍到了,[利用callback的方式实现了回调](http://www.jianshu.com/p/67190bdce647),这篇文章准备介绍的是利用listener实现回调。 ---- -#Java回调机制 +# Java回调机制 + +#### 根据实时性划分: -####根据实时性划分: - [同步回调](http://www.jianshu.com/p/67190bdce647) - [异步回调](http://www.jianshu.com/p/67190bdce647) -####实现方式 +#### 实现方式 + * [利用匿名内部类即callbck来实现](http://www.jianshu.com/p/67190bdce647) * 用listener来实现 @@ -44,10 +46,11 @@ public class Test extends AppCompatActivity implements View.OnClickListener { ```` -####回调的本质 +#### 回调的本质 + 其实无论哪种方式来实现回调,利用的思想都是观察者模式,即在我们选择订阅之后,当对方做出任何举动的时候会给我们发送一条信息,这样做的好处是省着我们用一个新的线程轮训检测对方的状态,可以节省很多的资源。 -####应用的场景 +#### 应用的场景 - 如果我们需要将信息一层一层的返回去的时候,正如我下面的例子,那么可能用listener更为适合我们,因为我们可以将这个listener进行传递,在需要查看数据的时候进行回调它。或者当我们有很多事件需要回调的时候,可以实现一个listener然后发送不同的信息,进行区分。这样代码看起来会简洁一些,不会像callback一样,会嵌套很多层,也不会写出很多个callback来。 From f0a68c41803218b7d3286504e5210367a48e5df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Sat, 24 Feb 2018 13:13:05 +0800 Subject: [PATCH 43/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 96c259b..4232cee 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) +- [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [十大基础算法](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401441966&idx=1&sn=653fe22c5a7e6c221fbf121124fd18a2&scene=21#wechat_redirect) - [一套比较好的面试题](http://blog.csdn.net/xhmj12/article/details/54730883) From a7bba52c78d3ec6108e185b5612e3c25c94b0cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 13:03:27 +0800 Subject: [PATCH 44/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4232cee..b806592 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) +- [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) - [十大基础算法](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401441966&idx=1&sn=653fe22c5a7e6c221fbf121124fd18a2&scene=21#wechat_redirect) - [一套比较好的面试题](http://blog.csdn.net/xhmj12/article/details/54730883) - [Android中常见面试题](/AndroidNote/Android面试相关/Android中常见面试题.md) From 14de5e5240ade7e149362009888a071792ae3bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 13:22:29 +0800 Subject: [PATCH 45/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b806592..a8205e1 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) +- [深入源码解析Android中的Handler,Message,MessageQueue,Looper](http://blog.csdn.net/iispring/article/details/47180325) - [十大基础算法](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401441966&idx=1&sn=653fe22c5a7e6c221fbf121124fd18a2&scene=21#wechat_redirect) - [一套比较好的面试题](http://blog.csdn.net/xhmj12/article/details/54730883) - [Android中常见面试题](/AndroidNote/Android面试相关/Android中常见面试题.md) From a9b95386a3a46cce16b2c644f5430938c11d664d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 14:24:53 +0800 Subject: [PATCH 46/95] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8205e1..89ec6ec 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 ### Android进阶 - +- [Android 多进程使用场景](http://blog.csdn.net/qq_27489007/article/details/54377655) - [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) - [30多年编码经验总结成10条最佳实践](https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484524&idx=1&sn=5b2759e6d89f01e61d021545ca7556b9&chksm=e82c3d4bdf5bb45dd77227982931ede8229ee6910829253a57bb905e810c89bd3f0a162786e8&mpshare=1&scene=23&srcid=1023FjKcLWtRlcDpwEeeJnCN#rd) - [Android中的动画](/AndroidNote/Android进阶/Android中的动画.md) From 4e50d58ede742d8afc7c7c6adb16a84815126fbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 15:37:37 +0800 Subject: [PATCH 47/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 89ec6ec..4765f27 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) +- [高并发下线程安全的单例模式](http://blog.csdn.net/cselmu9/article/details/51366946) - [深入源码解析Android中的Handler,Message,MessageQueue,Looper](http://blog.csdn.net/iispring/article/details/47180325) - [十大基础算法](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401441966&idx=1&sn=653fe22c5a7e6c221fbf121124fd18a2&scene=21#wechat_redirect) - [一套比较好的面试题](http://blog.csdn.net/xhmj12/article/details/54730883) From 8a7864a10ed1c1aa04d5a729249fb701b421dacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 16:02:00 +0800 Subject: [PATCH 48/95] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 4765f27..6c294f8 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,13 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [如何终止App的运行](/AndroidNote/Android面试相关/如何终止App的运行.md) - [如何实现Activity切换的动画](/AndroidNote/Android面试相关/如何实现Activity切换的动画.md) + +### 性能优化 + +- [Android开发性能优化总结(一)](http://blog.csdn.net/gs12software/article/details/51173392) +- [Android开发性能优化总结(二)](http://blog.csdn.net/gs12software/article/details/51234454) + + ### 开源框架 - [当下流行开源框架总览](/AndroidNote/Android开源框架相关/Android当下最流行的开源框架总结.md) From f4b8661e26ddefe4eebfc772cd49c1410be5a0a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 16:25:56 +0800 Subject: [PATCH 49/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6c294f8..bfc6b2a 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) +- [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) - [高并发下线程安全的单例模式](http://blog.csdn.net/cselmu9/article/details/51366946) From 17613ed95a26ed570076f8cf6a67921fd38f9f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 26 Feb 2018 16:41:51 +0800 Subject: [PATCH 50/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index bfc6b2a..eb1fb8e 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) +- [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) - [高并发下线程安全的单例模式](http://blog.csdn.net/cselmu9/article/details/51366946) From 643ea905c06970ff289630d7ebeffc75d2015e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 27 Feb 2018 10:47:34 +0800 Subject: [PATCH 51/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index eb1fb8e..cb6a391 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) +- [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) - [高并发下线程安全的单例模式](http://blog.csdn.net/cselmu9/article/details/51366946) From 32cd61181141736b967c083051bba1bd63358dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 27 Feb 2018 22:08:43 +0800 Subject: [PATCH 52/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cb6a391..5504e7f 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) +- [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) From 03f487720366be6eaf1a05e77538b12b87e3f28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 27 Feb 2018 22:10:15 +0800 Subject: [PATCH 53/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5504e7f..509c200 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) +- [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) From 7da245e4decdc2d45c903117cd33521ccb20c2e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 27 Feb 2018 23:01:05 +0800 Subject: [PATCH 54/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 509c200..1248cac 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) +- [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) - [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) From ee99f158ce79e31d9937dbb71b3fcc96a9908e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Wed, 28 Feb 2018 10:50:46 +0800 Subject: [PATCH 55/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1248cac..44673d1 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) +- [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) From f28478f3645aefad88a8c320f8af9339d90633e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Wed, 28 Feb 2018 14:49:25 +0800 Subject: [PATCH 56/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 44673d1..427b344 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) +- [简易断点续传下载器实现](https://www.jianshu.com/p/5b2e22c42467) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) From 870bcccbbb4993492504aa72d099cd3bb69e252e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 1 Mar 2018 10:41:23 +0800 Subject: [PATCH 57/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 427b344..d72d103 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) +- [Android性能优化之布局优化](https://www.cnblogs.com/hoolay/p/6248514.html) - [简易断点续传下载器实现](https://www.jianshu.com/p/5b2e22c42467) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) From efc636d929b384affc2be9f2633929e14c13cc97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 1 Mar 2018 14:06:42 +0800 Subject: [PATCH 58/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d72d103..957fbb4 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) +- [Android插件化系列第(一)篇---Hook技术之Activity的启动过程拦截](https://www.jianshu.com/p/69bfbda302df) - [Android性能优化之布局优化](https://www.cnblogs.com/hoolay/p/6248514.html) - [简易断点续传下载器实现](https://www.jianshu.com/p/5b2e22c42467) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) From d106e9f41a0eae5d760d564c6993ff5099c6c81b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 1 Mar 2018 14:19:14 +0800 Subject: [PATCH 59/95] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 957fbb4..d42c091 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,8 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) - [Android插件化系列第(一)篇---Hook技术之Activity的启动过程拦截](https://www.jianshu.com/p/69bfbda302df) +- [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) +- [Android插件化系列第(三)篇---Hook技术之View点击劫持](https://www.jianshu.com/p/dfc6e3989511) - [Android性能优化之布局优化](https://www.cnblogs.com/hoolay/p/6248514.html) - [简易断点续传下载器实现](https://www.jianshu.com/p/5b2e22c42467) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) @@ -132,7 +134,6 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) - [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) - [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) -- [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) From ffcd41ca69f7cbd365da50886a8af6c85a901273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 1 Mar 2018 15:59:28 +0800 Subject: [PATCH 60/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d42c091..e0615b8 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ Android-Note同时是博主的一个学习笔记,之前博主尝试着维护 [**Java面试相关**](https://github.com/linsir6/JavaNote) - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) +- [Android组件化方案](http://blog.csdn.net/guiying712/article/details/55213884) - [Android插件化系列第(一)篇---Hook技术之Activity的启动过程拦截](https://www.jianshu.com/p/69bfbda302df) - [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [Android插件化系列第(三)篇---Hook技术之View点击劫持](https://www.jianshu.com/p/dfc6e3989511) From 18ab8114905321f7ee7e589763b749fd129e319d Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 13 Mar 2018 16:26:52 +0800 Subject: [PATCH 61/95] change readme --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 675d3b3..0fc42a5 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,9 @@ **Android-Note里面记录了有关Android的常用基础知识、面试中经常被问到的知识点、Android进阶必备的知识。** -Android-Note同时是博主的一个学习笔记,之前博主尝试着维护多个学习笔记的项目,但是由于项目过多,不易于维护,故准备,暂时将一些其它内容的笔记也记录在这个项目中。 - -博主目前从事的工作是Android开发,但是对IOS开发,Java,Python,Node,Go,Vim,网络协议有着较为浓厚的兴趣,所以也会将一些学习的笔记记录在这里,欢迎大家和我一起讨论。 +由于目前正处在春招的时间点上,博主也正在积极准备春招,在这里把一些面试常问到的知识点总结一下。 +专门为面试准备的面试内容: https://github.com/linsir6/Android-Advance ## Android From da90a37e24733da60180876673c929cc707619b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Mon, 23 Apr 2018 23:31:51 +0800 Subject: [PATCH 62/95] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index d23da59..67fe65f 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,11 @@ - [使用Android内置WebView打开TextView中的超链接](http://iluhcm.com/2016/07/06/how-to-open-a-hyperlink-using-app-webview-with-textview/) +### Android源码相关 + +- [ Fresco源码解析 - DataSource怎样存储数据](https://blog.csdn.net/feelang/article/details/45420999) + + ---- ## linux From 504ce21478b61dbc8b204ea8b8fd052a82678d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 15 May 2018 21:01:16 +0800 Subject: [PATCH 63/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 67fe65f..5ce8d7f 100644 --- a/README.md +++ b/README.md @@ -317,6 +317,7 @@ - [MySQL导出数据库、表](/WebNote/MySQL相关/Mysql导出数据库、表(有无数据).md) - [Error-ER_TRUNCATED_WRONG_VALUE_FOR_FIELD](/WebNote/MySQL相关/Error--ER_TRUNCATED_WRONG_VALUE_FOR_FIELD.md) - [ERROR-1045-(28000)--Access-denied-for-user-'debian-sys-maint'@'localhost](/WebNote/MySQL相关/ERROR-1045-(28000)--Access-denied-for-user-'debian-sys-maint'@'localho.md) +- [mysql设置远程链接权限](https://www.cnblogs.com/gdsblog/p/7349551.html) ---- From 64d401f1f32d0037e67cd9b1f07c378e6383427f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Wed, 16 May 2018 22:56:32 +0800 Subject: [PATCH 64/95] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ce8d7f..52d4eda 100644 --- a/README.md +++ b/README.md @@ -318,6 +318,7 @@ - [Error-ER_TRUNCATED_WRONG_VALUE_FOR_FIELD](/WebNote/MySQL相关/Error--ER_TRUNCATED_WRONG_VALUE_FOR_FIELD.md) - [ERROR-1045-(28000)--Access-denied-for-user-'debian-sys-maint'@'localhost](/WebNote/MySQL相关/ERROR-1045-(28000)--Access-denied-for-user-'debian-sys-maint'@'localho.md) - [mysql设置远程链接权限](https://www.cnblogs.com/gdsblog/p/7349551.html) +- [关于初次安装mysql8.01遇到的问题解决](https://blog.csdn.net/l569746927/article/details/80025364) ---- From 2a0b368e639085fabada6f0940f08149e8e415cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Fri, 1 Jun 2018 13:37:58 +0800 Subject: [PATCH 65/95] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 52d4eda..66e15bb 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,8 @@ - [LinLog](/AndroidNote/Android开源框架相关/一款Android的Log、Toast的库.md) - [Retrofit 2.0 使用教程](http://www.jianshu.com/p/a3e162261ab6) - [retrofit 2.0 源码解析](http://www.jianshu.com/p/0c055ad46b6c) +- [关于 RxJava 背压](https://juejin.im/entry/58e704cbac502e4957b230eb) +- [RxJava 2.0中backpressure(背压)概念的理解](https://blog.csdn.net/jdsjlzx/article/details/52717636) ### 打包 From aef6d5896a8b9182866d6460e70016b9e5ecea3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 21 Jun 2018 21:41:33 +0800 Subject: [PATCH 66/95] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 66e15bb..51c376b 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,9 @@ - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) - [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) -- [深入探讨 Java 类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) +- [深入探讨 + +类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) @@ -248,7 +250,7 @@ - [JVM虚拟机基础知识](/JavaNote/Java相关/JVM虚拟机基础知识.md) - [JVM类加载器](/JavaNote/Java相关/JVM类加载器.md) - [Javase基础知识](https://github.com/francistao/LearningNotes/blob/master/Part2/JavaSE/Java基础知识.md) - +- [SparseArray 的使用及实现原理](http://extremej.itscoder.com/sparsearray_source_analyse/) ### JavaEE相关 From e6b928750b89facaa856e3d5401752b738be2933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 21 Jun 2018 21:46:37 +0800 Subject: [PATCH 67/95] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 51c376b..e4458d1 100644 --- a/README.md +++ b/README.md @@ -133,9 +133,7 @@ - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) - [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) - [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) -- [深入探讨 - -类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) +- [深入探讨类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) - [Android 消息机制——你真的了解Handler?](http://blog.csdn.net/qian520ao/article/details/78262289?locationNum=2&fps=1) From c70cfad39c3a1bce8aec099a1e58e5d8605b9db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Thu, 21 Jun 2018 22:08:00 +0800 Subject: [PATCH 68/95] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e4458d1..2813ed9 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,9 @@ - [Android Studio3.0更新之路(遇坑必入)](http://www.jianshu.com/p/15afb8234d19) - [Android Studio3.0正式版填坑路](http://www.jianshu.com/p/9b25087a5d7d) - [Android混合编程:WebView实践](https://juejin.im/post/59f17a7051882546d71e91a7) +- [runOnUiThread 、Handler.post、View.post之间的区别](https://blog.csdn.net/dengpeng_/article/details/78804404) +- [理解 Activity.runOnUiThread](https://www.jianshu.com/p/e39449026f21) +- [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) From 18a6f048daeea2bc77dc1ed57cbe65b1d180f330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Tue, 3 Jul 2018 20:56:49 +0800 Subject: [PATCH 69/95] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2813ed9..a8be305 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ ### Android进阶 +- [Android 触控事件解析 - Mastering The Android Touch System 笔记 +](https://www.jianshu.com/p/c65da5e81afd) - [Android 多进程使用场景](http://blog.csdn.net/qq_27489007/article/details/54377655) - [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) - [30多年编码经验总结成10条最佳实践](https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484524&idx=1&sn=5b2759e6d89f01e61d021545ca7556b9&chksm=e82c3d4bdf5bb45dd77227982931ede8229ee6910829253a57bb905e810c89bd3f0a162786e8&mpshare=1&scene=23&srcid=1023FjKcLWtRlcDpwEeeJnCN#rd) From 865676f9b3ca52c63b97b25b90edaa003abdb766 Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 8 Jul 2018 17:16:17 +0800 Subject: [PATCH 70/95] =?UTF-8?q?add=20=E5=AD=A6=E4=B9=A0=E6=96=87?= =?UTF-8?q?=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index a8be305..cec4967 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,14 @@ - [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) +### Gradle相关 + +- [如何理解 Transform API](https://juejin.im/entry/59776f2bf265da6c4741db2b) +- [Gradle自定义插件详解](https://www.jianshu.com/p/03eb55536298) +- [Android 突破 DEX 文件的 64k方法数限制](http://yifeng.studio/2016/10/26/android-64k-methods-count/) +- [Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/) +- [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) + ### 自定义View From b47dd1fe9724159f59eb5b1d180a42a6024155e8 Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 8 Jul 2018 18:32:01 +0800 Subject: [PATCH 71/95] =?UTF-8?q?=E5=8B=98=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\346\274\217\346\200\273\347\273\223.md" | 26 ------------------- 1 file changed, 26 deletions(-) diff --git "a/AndroidNote/Android\350\277\233\351\230\266/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" "b/AndroidNote/Android\350\277\233\351\230\266/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" index f1cda55..5165f3a 100644 --- "a/AndroidNote/Android\350\277\233\351\230\266/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" +++ "b/AndroidNote/Android\350\277\233\351\230\266/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" @@ -123,33 +123,7 @@ o = null; 在这个例子中,循环申请Object 对象,并将所申请的对象放入一个Vector 中,如果仅仅释放引用本身(o=null),那么Vector 仍然引用该对象,所以这个对象对GC 来说是不可回收的。因此,如果对象加入到Vector 后,还必须从Vector 中删除,最简单的方法就是将Vector对象设置为null。 -2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。 -例如: - -``` -public static void main(String[] args) -{ -Set set = new HashSet(); -Person p1 = new Person("唐僧","pwd1",25); -Person p2 = new Person("孙悟空","pwd2",26); -Person p3 = new Person("猪八戒","pwd3",27); -set.add(p1); -set.add(p2); -set.add(p3); -System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素! -p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变 - -set.remove(p3); //此时remove不掉,造成内存泄漏 - -set.add(p3); //重新添加,居然添加成功 -System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素! -for (Person person : set) -{ -System.out.println(person); -} -} -``` 3、监听器 From ad69a3a88288a4447cee83d07fefd7884817c0e5 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 9 Jul 2018 20:33:39 +0800 Subject: [PATCH 72/95] =?UTF-8?q?add=20=E8=A7=A3=E6=9E=90ConstraintLayout?= =?UTF-8?q?=E7=9A=84=E6=80=A7=E8=83=BD=E4=BC=98=E5=8A=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cec4967..173d733 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ - [初识ConstraintLayout](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548068&idx=1&sn=f750ae79c9458f89c3cf85f7573ba579&scene=21#wechat_redirect) - [TabLayout记录](/AndroidNote/Android基础/tablayout记录.md) - [用SpannableString打造绚丽多彩的文本显示效果](http://www.jianshu.com/p/84067ad289d2) +- [解析ConstraintLayout的性能优势](https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ) ### Android进阶 From c0258c1454fd9ac09ffa9f3ee432387422bcc2cc Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 9 Jul 2018 20:54:03 +0800 Subject: [PATCH 73/95] =?UTF-8?q?add=20Android=E6=96=B0=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E4=BB=8B=E7=BB=8D=EF=BC=8CConstraintLayout=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 173d733..097c95a 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ - [TabLayout记录](/AndroidNote/Android基础/tablayout记录.md) - [用SpannableString打造绚丽多彩的文本显示效果](http://www.jianshu.com/p/84067ad289d2) - [解析ConstraintLayout的性能优势](https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ) +- [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) ### Android进阶 From 1b8fc52387508a166da405eea995775bb996d1ab Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 9 Jul 2018 21:44:38 +0800 Subject: [PATCH 74/95] =?UTF-8?q?add=20Android=E6=96=B0=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E4=BB=8B=E7=BB=8D=EF=BC=8CConstraintLayout=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 097c95a..32d3a00 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ - [用SpannableString打造绚丽多彩的文本显示效果](http://www.jianshu.com/p/84067ad289d2) - [解析ConstraintLayout的性能优势](https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ) - [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) +- [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) ### Android进阶 From 17a166eebbfa4f76654f2a72b5658eb98b70bca7 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 10 Jul 2018 18:40:42 +0800 Subject: [PATCH 75/95] =?UTF-8?q?add=20=E6=BB=B4=E6=BB=B4=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=8C=96=E6=96=B9=E6=A1=88=20VirtualApk=20=E6=BA=90?= =?UTF-8?q?=E7=A0=81=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 32d3a00..d305e6a 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,10 @@ - [Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/) - [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) +### 插件化相关 + +- [滴滴插件化方案 VirtualApk 源码解析](https://blog.csdn.net/lmj623565791/article/details/75000580) + ### 自定义View From 9c0f17ba44b5b806096d1a5954292117e6b9ffb6 Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 11 Jul 2018 22:00:25 +0800 Subject: [PATCH 76/95] =?UTF-8?q?add=E7=83=AD=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index d305e6a..18b7881 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,14 @@ - [滴滴插件化方案 VirtualApk 源码解析](https://blog.csdn.net/lmj623565791/article/details/75000580) +### 热修复相关 + +- [Android 热修复 Tinker Gradle Plugin解析](https://blog.csdn.net/lmj623565791/article/details/72667669) +- [Android 热修复 Tinker接入及源码浅析](https://blog.csdn.net/lmj623565791/article/details/54882693) +- [Android 热修复 Tinker 源码分析之DexDiff / DexPatch](https://blog.csdn.net/lmj623565791/article/details/60874334) + + + ### 自定义View - [自定义View入门](/AndroidNote/Android自定义View/自定义View入门.md) From b8bd21bcb8c6942514db57e4b7a4011b22c795f3 Mon Sep 17 00:00:00 2001 From: linsir Date: Thu, 12 Jul 2018 21:54:05 +0800 Subject: [PATCH 77/95] add note --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 18b7881..037c0ef 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,7 @@ - [Android 突破 DEX 文件的 64k方法数限制](http://yifeng.studio/2016/10/26/android-64k-methods-count/) - [Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/) - [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) +- [gradle简单入门系列](http://www.cnblogs.com/davenkin/p/gradle-learning-1.html) ### 插件化相关 From 8cefa9ff551274f0fb511aa9f7dc9d9c4a118249 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 16 Jul 2018 20:15:03 +0800 Subject: [PATCH 78/95] =?UTF-8?q?add=20add=20Gradle=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 037c0ef..677602d 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,8 @@ - [Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/) - [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) - [gradle简单入门系列](http://www.cnblogs.com/davenkin/p/gradle-learning-1.html) +- [Gradle简单配置](https://mp.weixin.qq.com/s/1UHcYOudViMhpUYeREZzGA) + ### 插件化相关 From 85d1e13abecedc847b21076d4d361d87cd299e27 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 17 Jul 2018 18:30:10 +0800 Subject: [PATCH 79/95] =?UTF-8?q?add=20Android=20=E5=A6=82=E4=BD=95?= =?UTF-8?q?=E7=BC=96=E5=86=99=E5=9F=BA=E4=BA=8E=E7=BC=96=E8=AF=91=E6=97=B6?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=E7=9A=84=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 677602d..0b5656f 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ - [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) - [gradle简单入门系列](http://www.cnblogs.com/davenkin/p/gradle-learning-1.html) - [Gradle简单配置](https://mp.weixin.qq.com/s/1UHcYOudViMhpUYeREZzGA) +- [Android 如何编写基于编译时注解的项目](https://blog.csdn.net/lmj623565791/article/details/51931859) ### 插件化相关 From 697f64b4e5867d2a736a5aa4c5b5144240b964d5 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 17 Jul 2018 20:54:03 +0800 Subject: [PATCH 80/95] =?UTF-8?q?Android=20=E6=8E=A2=E7=A9=B6=20LayoutInfl?= =?UTF-8?q?ater=20setFactory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0b5656f..89ba50e 100644 --- a/README.md +++ b/README.md @@ -90,6 +90,7 @@ - [runOnUiThread 、Handler.post、View.post之间的区别](https://blog.csdn.net/dengpeng_/article/details/78804404) - [理解 Activity.runOnUiThread](https://www.jianshu.com/p/e39449026f21) - [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) +- [Android 探究 LayoutInflater setFactory](https://blog.csdn.net/lmj623565791/article/details/51503977) ### Gradle相关 From 4b1ce2d086c94323cfd34857bfb165c6b707c33d Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 17 Jul 2018 21:17:15 +0800 Subject: [PATCH 81/95] =?UTF-8?q?add=20=E5=B7=A7=E7=94=A8ViewPager=20?= =?UTF-8?q?=E6=89=93=E9=80=A0=E4=B8=8D=E4=B8=80=E6=A0=B7=E7=9A=84=E5=B9=BF?= =?UTF-8?q?=E5=91=8A=E8=BD=AE=E6=92=AD=E5=88=87=E6=8D=A2=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 89ba50e..b2be8f0 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ - [理解 Activity.runOnUiThread](https://www.jianshu.com/p/e39449026f21) - [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) - [Android 探究 LayoutInflater setFactory](https://blog.csdn.net/lmj623565791/article/details/51503977) +- [巧用ViewPager 打造不一样的广告轮播切换效果](https://blog.csdn.net/lmj623565791/article/details/51339751) ### Gradle相关 From 81571249c1ec17b9c572ce70943c2352a23b98e6 Mon Sep 17 00:00:00 2001 From: linsir Date: Tue, 17 Jul 2018 21:52:37 +0800 Subject: [PATCH 82/95] =?UTF-8?q?add=20Retrofit2=20=E5=AE=8C=E5=85=A8?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=20=E6=8E=A2=E7=B4=A2=E4=B8=8Eokhttp=E4=B9=8B?= =?UTF-8?q?=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b2be8f0..b558de6 100644 --- a/README.md +++ b/README.md @@ -207,6 +207,7 @@ - [retrofit 2.0 源码解析](http://www.jianshu.com/p/0c055ad46b6c) - [关于 RxJava 背压](https://juejin.im/entry/58e704cbac502e4957b230eb) - [RxJava 2.0中backpressure(背压)概念的理解](https://blog.csdn.net/jdsjlzx/article/details/52717636) +- [Retrofit2 完全解析 探索与okhttp之间的关系](https://blog.csdn.net/lmj623565791/article/details/51304204) ### 打包 From bf265e0aaf94f5e537ab69174ad878ca24d93acb Mon Sep 17 00:00:00 2001 From: linsir Date: Wed, 18 Jul 2018 13:31:04 +0800 Subject: [PATCH 83/95] =?UTF-8?q?add=20=E4=B8=BARecyclerView=E6=89=93?= =?UTF-8?q?=E9=80=A0=E9=80=9A=E7=94=A8Adapter=20=E8=AE=A9RecyclerView?= =?UTF-8?q?=E6=9B=B4=E5=8A=A0=E5=A5=BD=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b558de6..d09a933 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ - [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) - [Android 探究 LayoutInflater setFactory](https://blog.csdn.net/lmj623565791/article/details/51503977) - [巧用ViewPager 打造不一样的广告轮播切换效果](https://blog.csdn.net/lmj623565791/article/details/51339751) +- [为RecyclerView打造通用Adapter 让RecyclerView更加好用](https://blog.csdn.net/lmj623565791/article/details/51118836) ### Gradle相关 From 4ad4126cec8d408b8264992b2cff0484003c6c96 Mon Sep 17 00:00:00 2001 From: linsir Date: Thu, 19 Jul 2018 15:05:44 +0800 Subject: [PATCH 84/95] =?UTF-8?q?add=20Gradle=20=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E6=8C=87=E5=8D=97=EF=BC=88Android=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d09a933..6c6f0b9 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,7 @@ - [gradle简单入门系列](http://www.cnblogs.com/davenkin/p/gradle-learning-1.html) - [Gradle简单配置](https://mp.weixin.qq.com/s/1UHcYOudViMhpUYeREZzGA) - [Android 如何编写基于编译时注解的项目](https://blog.csdn.net/lmj623565791/article/details/51931859) +- [Gradle 完整指南(Android)](https://www.jianshu.com/p/9df3c3b6067a) ### 插件化相关 From 438919c25689593ce1ccd37ffa41741850971a7c Mon Sep 17 00:00:00 2001 From: linsir Date: Thu, 19 Jul 2018 16:11:15 +0800 Subject: [PATCH 85/95] =?UTF-8?q?add=20Android=20=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=97=A0=E9=99=90=E5=BE=AA=E7=8E=AF=E6=BB=9A=E5=8A=A8=E7=9A=84?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E5=BC=8FViewPager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6c6f0b9..cd9635b 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ - [解析ConstraintLayout的性能优势](https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ) - [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) - [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) +- [Android 一个无限循环滚动的卡片式ViewPager](https://blog.csdn.net/qq_30552993/article/details/76208535) ### Android进阶 From f3b1ed3af0aa060a2f7d3e0b2ee7e76c50081ef3 Mon Sep 17 00:00:00 2001 From: linsir Date: Fri, 20 Jul 2018 21:55:29 +0800 Subject: [PATCH 86/95] =?UTF-8?q?add=20MNCrashMonitor=20=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=B4=A9=E6=BA=83=E6=97=A5=E5=BF=97,?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E6=97=A5=E5=BF=97=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cd9635b..dd7d793 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ - [Android 探究 LayoutInflater setFactory](https://blog.csdn.net/lmj623565791/article/details/51503977) - [巧用ViewPager 打造不一样的广告轮播切换效果](https://blog.csdn.net/lmj623565791/article/details/51339751) - [为RecyclerView打造通用Adapter 让RecyclerView更加好用](https://blog.csdn.net/lmj623565791/article/details/51118836) +- [MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表](http://www.wanandroid.com/blog/show/2207) ### Gradle相关 From 68cc6a4a853d18452e295aff817f137e714c7010 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 6 Aug 2018 20:15:36 +0800 Subject: [PATCH 87/95] =?UTF-8?q?add=20=E3=80=8E=E8=BF=9B=E9=98=B6?= =?UTF-8?q?=E4=B9=8B=E8=B7=AF=E3=80=8F=E2=80=94=E2=80=94=20=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dd7d793..4c326aa 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ - [巧用ViewPager 打造不一样的广告轮播切换效果](https://blog.csdn.net/lmj623565791/article/details/51339751) - [为RecyclerView打造通用Adapter 让RecyclerView更加好用](https://blog.csdn.net/lmj623565791/article/details/51118836) - [MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表](http://www.wanandroid.com/blog/show/2207) +- [『进阶之路』—— 线程池](http://www.wanandroid.com/blog/show/2264) ### Gradle相关 From ca5abdf6e72eb1fd2d12c0479de6b5f4e25b38a0 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 6 Aug 2018 21:20:17 +0800 Subject: [PATCH 88/95] =?UTF-8?q?add=20=E4=BB=8Ejson=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=B0=E7=82=AB=E9=85=B7=E5=8A=A8=E7=94=BB-Lottie=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=80=9D=E8=B7=AF=E5=92=8C=E6=BA=90=E7=A0=81=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4c326aa..d46bf4d 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ - [为RecyclerView打造通用Adapter 让RecyclerView更加好用](https://blog.csdn.net/lmj623565791/article/details/51118836) - [MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表](http://www.wanandroid.com/blog/show/2207) - [『进阶之路』—— 线程池](http://www.wanandroid.com/blog/show/2264) +- [从json文件到炫酷动画-Lottie实现思路和源码分析](https://www.jianshu.com/p/81be1bf9600c) ### Gradle相关 From 0f33959c98c68505afe28065bcec0f45a7cb9300 Mon Sep 17 00:00:00 2001 From: linsir Date: Mon, 6 Aug 2018 21:55:57 +0800 Subject: [PATCH 89/95] =?UTF-8?q?dd=20Lottie=E5=8A=A8=E7=94=BB=E5=BA=93=20?= =?UTF-8?q?Android=20=E7=AB=AF=E6=BA=90=E7=A0=81=E6=B5=85=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d46bf4d..2c1e8d5 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ - [MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表](http://www.wanandroid.com/blog/show/2207) - [『进阶之路』—— 线程池](http://www.wanandroid.com/blog/show/2264) - [从json文件到炫酷动画-Lottie实现思路和源码分析](https://www.jianshu.com/p/81be1bf9600c) +- [Lottie动画库 Android 端源码浅析](http://chenhaohui.com/2017/03/13/sd/) ### Gradle相关 From ac82bd2a53856e5e9d6c526e68295fa2148b282c Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 20 Jan 2019 11:54:30 +0800 Subject: [PATCH 90/95] test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c1e8d5..030025f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Android-Note +# Android-Note2 [![Travis](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/linsir6) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub (pre-)release](https://img.shields.io/badge/release-v1.0.3-ff69b4.svg)](https://github.com/linsir6/Android-Notes/releases) [![User](https://img.shields.io/badge/user-linsir-yellow.svg)](https://github.com/linsir6) From 97aab758339491b1af49d8b0ab86664a9341576b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Sun, 20 Jan 2019 11:54:44 +0800 Subject: [PATCH 91/95] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c1e8d5..fd4a2e2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Android-Note +# Android-Note1 [![Travis](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/linsir6) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub (pre-)release](https://img.shields.io/badge/release-v1.0.3-ff69b4.svg)](https://github.com/linsir6/Android-Notes/releases) [![User](https://img.shields.io/badge/user-linsir-yellow.svg)](https://github.com/linsir6) From 1af8dd305c41b839e54361000f1744c6dbdc8a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=B3=E7=8E=AE=E7=90=B3=40linsir=2Etop?= Date: Sun, 20 Jan 2019 11:58:31 +0800 Subject: [PATCH 92/95] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fd4a2e2..c6097dc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -# Android-Note1 +# Android-Note3 +4 [![Travis](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/linsir6) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub (pre-)release](https://img.shields.io/badge/release-v1.0.3-ff69b4.svg)](https://github.com/linsir6/Android-Notes/releases) [![User](https://img.shields.io/badge/user-linsir-yellow.svg)](https://github.com/linsir6) From 2b5b8e99478bd74a488f777ea9dd6afd218e3557 Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 20 Jan 2019 11:59:12 +0800 Subject: [PATCH 93/95] test2 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 030025f..f5ad458 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Android-Note2 - +# Android-Note7 +8 [![Travis](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/linsir6) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub (pre-)release](https://img.shields.io/badge/release-v1.0.3-ff69b4.svg)](https://github.com/linsir6/Android-Notes/releases) [![User](https://img.shields.io/badge/user-linsir-yellow.svg)](https://github.com/linsir6) From 583ddbdd68ccc6ba5fbb3332f035f542534037e0 Mon Sep 17 00:00:00 2001 From: linsir Date: Sun, 27 Jan 2019 19:20:05 +0800 Subject: [PATCH 94/95] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E8=AF=AF=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d98329a..2c1e8d5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Android-Note7 +# Android-Note [![Travis](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://github.com/linsir6) [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub (pre-)release](https://img.shields.io/badge/release-v1.0.3-ff69b4.svg)](https://github.com/linsir6/Android-Notes/releases) [![User](https://img.shields.io/badge/user-linsir-yellow.svg)](https://github.com/linsir6) From 50e0b973abfc3d4454dd7f84f6cafdf0748be713 Mon Sep 17 00:00:00 2001 From: guanweilin Date: Sat, 4 Mar 2023 17:13:22 +0800 Subject: [PATCH 95/95] delete invalid link --- README.md | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 2c1e8d5..284538d 100644 --- a/README.md +++ b/README.md @@ -32,22 +32,15 @@ - [RecyclerView的使用](/AndroidNote/Android基础/RecyclerView的简介.md) - [Android获取SHA1](/AndroidNote/Android基础/Android获取SHA1.md) - [Recyclerview和Listview的异同.md](/AndroidNote/Android进阶/Recyclerview和Listview的异同.md) -- [初识ConstraintLayout](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548068&idx=1&sn=f750ae79c9458f89c3cf85f7573ba579&scene=21#wechat_redirect) - [TabLayout记录](/AndroidNote/Android基础/tablayout记录.md) -- [用SpannableString打造绚丽多彩的文本显示效果](http://www.jianshu.com/p/84067ad289d2) -- [解析ConstraintLayout的性能优势](https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ) -- [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) -- [Android新特性介绍,ConstraintLayout完全解析](https://blog.csdn.net/guolin_blog/article/details/53122387) -- [Android 一个无限循环滚动的卡片式ViewPager](https://blog.csdn.net/qq_30552993/article/details/76208535) + ### Android进阶 -- [Android 触控事件解析 - Mastering The Android Touch System 笔记 -](https://www.jianshu.com/p/c65da5e81afd) +- [Android 触控事件解析 - Mastering The Android Touch System 笔记](https://www.jianshu.com/p/c65da5e81afd) - [Android 多进程使用场景](http://blog.csdn.net/qq_27489007/article/details/54377655) - [Android官网建议代码规范](https://source.android.com/source/code-style#java-language-rules) -- [30多年编码经验总结成10条最佳实践](https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484524&idx=1&sn=5b2759e6d89f01e61d021545ca7556b9&chksm=e82c3d4bdf5bb45dd77227982931ede8229ee6910829253a57bb905e810c89bd3f0a162786e8&mpshare=1&scene=23&srcid=1023FjKcLWtRlcDpwEeeJnCN#rd) - [Android中的动画](/AndroidNote/Android进阶/Android中的动画.md) - [深入了解MVXX模式](/AndroidNote/Android进阶/深入了解MVXX模式.md) - [Android项目总结](/AndroidNote/Android进阶/Android项目总结.md) @@ -59,7 +52,6 @@ - [Handler引起的内存泄漏的案例与分析](/AndroidNote/Android进阶/Handler引起的内存泄漏以及分析.md) - [Android性能优化.md](/AndroidNote/Android进阶/Android性能优化.md) - [LeakCanary的工作过程以及原理](AndroidNote/Android性能优化相关/LeakCanary工作过程以及原理.md) -- [AIDL的具体实现流程](http://bbs.51cto.com/thread-1086040-1.html) - [Android中利用异步来优化处理速度](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=401555104&idx=1&sn=501e6158e6eb26b4e86467be01fd290e&scene=21#wechat_redirect) - [为什么选择Binder实现Android中跨进程通信](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548116&idx=1&sn=d11a131871623110c74e3676d4fcf785&chksm=f1180e29c66f873f9cac5dc104f97fae319c1831219a9fd9458a4429f16562f6712cc7f65a4c&scene=21#wechat_redirect) - [三大图片缓存框架的对比](https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649547344&idx=2&sn=e3fa99b52055a37202634fe61a62d439&scene=21#wechat_redirect) @@ -76,7 +68,6 @@ - [Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1](http://blog.csdn.net/coder_pig/article/details/49006217) - [Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2](http://blog.csdn.net/coder_pig/article/details/49008397) - [Android-Drawable高级用法](http://blog.csdn.net/lmj623565791/article/details/43752383) -- [安卓开踩过的坑:你的 Bitmap 究竟占多大内存?](http://dev.qq.com/topic/591d61f56793d26660901b4e) - [Android 4.4 中 WebView 使用注意事项](https://github.com/cundong/blog/blob/master/Android%204.4%20%E4%B8%AD%20WebView%20%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9.md) - [Android图像处理 - 高斯模糊的原理及实现](https://mp.weixin.qq.com/s?__biz=MzI2MTU3MTE4NQ==&mid=2247483896&idx=1&sn=50c61e2c78aa610a1944be6a89bd75e5&chksm=ea5916e6dd2e9ff0a62af64c7f345ffb5c6dafdb65847b757b99afcc6fed8e1270e915dbcb25&mpshare=1&scene=23&srcid=1001DxwdQpiMwea74mczpSw8#rd) - [Android实战——GreenDao3.2的使用,爱不释手](https://mp.weixin.qq.com/s/4Nx2DacsK65O5LanPZUszA) @@ -90,27 +81,21 @@ - [Android混合编程:WebView实践](https://juejin.im/post/59f17a7051882546d71e91a7) - [runOnUiThread 、Handler.post、View.post之间的区别](https://blog.csdn.net/dengpeng_/article/details/78804404) - [理解 Activity.runOnUiThread](https://www.jianshu.com/p/e39449026f21) -- [说说 getMainLooper](http://www.icodeyou.com/2015/10/11/2015-10-11-getMainLooper/) - [Android 探究 LayoutInflater setFactory](https://blog.csdn.net/lmj623565791/article/details/51503977) - [巧用ViewPager 打造不一样的广告轮播切换效果](https://blog.csdn.net/lmj623565791/article/details/51339751) - [为RecyclerView打造通用Adapter 让RecyclerView更加好用](https://blog.csdn.net/lmj623565791/article/details/51118836) - [MNCrashMonitor 监听程序崩溃日志,直接页面展示崩溃日志列表](http://www.wanandroid.com/blog/show/2207) - [『进阶之路』—— 线程池](http://www.wanandroid.com/blog/show/2264) - [从json文件到炫酷动画-Lottie实现思路和源码分析](https://www.jianshu.com/p/81be1bf9600c) -- [Lottie动画库 Android 端源码浅析](http://chenhaohui.com/2017/03/13/sd/) ### Gradle相关 - [如何理解 Transform API](https://juejin.im/entry/59776f2bf265da6c4741db2b) -- [Gradle自定义插件详解](https://www.jianshu.com/p/03eb55536298) -- [Android 突破 DEX 文件的 64k方法数限制](http://yifeng.studio/2016/10/26/android-64k-methods-count/) - [Android Dex分包之旅](http://yydcdut.com/2016/03/20/split-dex/) -- [美团Android DEX自动拆包及动态加载简介](https://tech.meituan.com/mt-android-auto-split-dex.html) - [gradle简单入门系列](http://www.cnblogs.com/davenkin/p/gradle-learning-1.html) - [Gradle简单配置](https://mp.weixin.qq.com/s/1UHcYOudViMhpUYeREZzGA) - [Android 如何编写基于编译时注解的项目](https://blog.csdn.net/lmj623565791/article/details/51931859) -- [Gradle 完整指南(Android)](https://www.jianshu.com/p/9df3c3b6067a) ### 插件化相关 @@ -160,20 +145,14 @@ ### 面试题 - - [**Java面试相关**](https://github.com/linsir6/JavaNote) - - [Android动态加载技术三个关键问题详解](https://blog.tingyun.com/web/article/detail/166) - [Android组件化方案](http://blog.csdn.net/guiying712/article/details/55213884) -- [Android插件化系列第(一)篇---Hook技术之Activity的启动过程拦截](https://www.jianshu.com/p/69bfbda302df) - [Android插件化系列第(二)篇---动态加载技术之apk换肤](https://www.jianshu.com/p/d1c6e67f7889) - [Android插件化系列第(三)篇---Hook技术之View点击劫持](https://www.jianshu.com/p/dfc6e3989511) - [Android性能优化之布局优化](https://www.cnblogs.com/hoolay/p/6248514.html) - [简易断点续传下载器实现](https://www.jianshu.com/p/5b2e22c42467) - [超详细面试基础题](https://mp.weixin.qq.com/s/YVvV3-RUjbqYo-DYY3E6nA) - [JVM结构、GC工作机制详解](http://blog.csdn.net/tonytfjing/article/details/44278233) -- [深入理解Activity的生命周期](https://www.jianshu.com/p/fb44584daee3) -- [2017-Android暑期实习生面试经验谈](http://lruheng.com/2017/05/09/2017-Android%E6%9A%91%E6%9C%9F%E5%AE%9E%E4%B9%A0%E7%94%9F%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E8%B0%88/) - [深入探讨类加载器](https://www.ibm.com/developerworks/cn/java/j-lo-classloader/) - [找到无序数组中最小的K个数](https://www.cnblogs.com/xiaomoxian/archive/2016/02/11/5186762.html) - [字符编码笔记:ASCII,Unicode和UTF-8](http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html) @@ -301,7 +280,7 @@ - [Spring Boot 配置文件 – 在坑中实践](https://www.bysocket.com/?p=1786) - [Spring Boot 之 RESRful API 权限控制](https://www.bysocket.com/?p=1080) - [Spring Boot 整合 Redis 实现缓存操作](https://www.bysocket.com/?p=1756) -- [Spring Boot 官方文档](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/  ) +- [Spring Boot 官方文档](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/) ----