就看天气——是一款遵循 Material Design 风格的只看天气的APP。
卡片展现(当前天气情况,未来几小时天气情况,生活建议,一周七天概况)
缓存数据,减少网络请求,保证离线查看
内置两套图标(设置里更改)
原作者Github项目:xcc3641/SeeWeather
- 开发规范:Android 开发规范(完结版) - 简书
- Gradle
- Android Gradle权威指南 网上还出了《实战Gradle》以及《Gradle for Android 中文版》等Gradle书籍,其 实Gradle书籍一般都会存在知识点不齐全问题,所以我建议选择这本入门,之后结合百 度或者博客等获取到你需要的Gradle知识即可
- 新一代构建工具gradle-慕课网
- 压缩图片:TinyPNG – Compress PNG,目前我遇到最好用 的图像压缩在线网站,一般开发中用的图片都需要经过压缩,现在网上很多压缩网站都是压 缩完的图片,带水印免费,无水印需要你开会员,真恶心!!!
- Android基础:
- Android基础知识复习:尚硅谷15天Android基础(复习笔记) - CSDN博客
- 四大组件:
- Activity:
- PreferenceActivity:
- Fragment
- 实现Activity和Fragment之前通信 - CSDN博客
- 死磕 Fragment 的生命周期 - MeloDev的博客 - CSDN博客
- android fragment onHiddenChanged的使用 - CSDN博客 ,这里是为了解释第二篇博文准备的
- Fragment的setUserVisibleHint方法实现懒加载,但 setUserVisibleHint 不起作用? - Leevey·L - 博客园 ,这里是为了解释第二篇博文准备的
- TabLayout使用详解 - 简书 ,这里是为了解释第二篇博文准备的
- 套在ViewPagerz中的Fragment在各种状态下的生命周期 - CSDN博客
- Android -- Fragment 基本用法、生命周期与细节注意 - 简书
- Fragment全解析系列(一):那些年踩过的坑 - 简书 ,这系列的四篇都很经典,建议你可以看看
- 还不知道怎么入门解析Fragment的可以看我的面经,里面涉及了(卖个广告), Android面经-基础篇(持续更新...) - CSDN博客
- 关于保存和恢复Fragment目前最正确的状态:The Real Best Practices to Save/Restore Activity's and Fragment's state. (StatedFragment is now deprecated)
- 关于BaseActivity跟BaseFragment的封装:从BaseActivity与BaseFragment 的封装谈起 - Young_Kai
- Material Design:
- Android Theme.AppCompat 中,你应该熟悉的颜色属性 - 简书 这家伙的关于MD文章也是值得一看的,简短but精辟
- ToolBar:
- CoordinatorLayout(本身就是一个加强版的FrameLayout)可以监听其所有子控件 的各种事件,然后自动帮助我们做出最为最为合理的响应 <--(寄生) AppBarLayout (垂直的LinearLayout加强版),它在内部做了很多滚动事件的封装 <--(寄生) CollapsingToolBarLayout(可折叠式标题栏)
- CoordinatorLayout:
- DrawLayout:
- RecyclerView:
- SwipeRefreshLayout:
- NestedScrollView:
- 看不懂物料设计的话建议买郭霖先生的《第二行代码》好一点,这本书内容对于初级 开发者来说还是蛮不错的
- Android布局优化之ViewStub、include、merge使用与源码分析 - CSDN博客
- RxBus
- Http知识:
- Notification通知
- 全面解析Notification - CSDN博客
- 这里有一个问题的,就是Builder里面方法setProgress(int max, int progress, boolean indeterminate)的第三个参数indeterminate问题,这里有讲解,好好细 看:Android官方开发文档Training系列课程:通知用户之在通知中显示进度
- PendingIntent.getActivity的使用 - 博客园
- "给大家躺个坑,实用Android.support.v4.app.NotificationCompat.BigTextStyle 的时候,当你的文本内容有感叹号的时候你的通知不会显示出来,还没有具体看源码是 什么原因......我用的魅族PRO5,大家遇到了就将文本中的感叹号替换掉就可以了", 在网址Notification常见样式总结 - 简书 评论区看到
- ButterKnife
- OrmLite-Android高性能数据库框架
- Android 快速开发系列之数据库篇(LiteOrm) -简书
- litesuits/android-lite-orm
- 由于OrmLite已经很久没有更新以及没有使用Gradle配置方式,这里我个人建议大家可 以尝试使用郭霖先生的LitePal(原理上跟OrmLite一样的),升级数据库可以不清数据: Android数据库高手秘籍(一)——SQLite命令 - 郭霖的专栏 - CSDN博客 以及LitePal 1.6.0版本来袭,数据加解密功能保障你的应用数据安全
- bugtags-移动时代首选 Bug 管理系统:Bugtags 使用说明 - CSDN博客
- Watcher-Help to watch the fps and used memory of your app(检测App的已用 内存以及帧/秒)
- stetho-Android调试工具。它可以通过chrome的开发者工具来辅助安卓开发。
- blockcanary-自动检测性能卡顿的工具
- 找出造成Android App界面卡顿的原因- BlockCanary - 简书
- BlockCanary分析android卡顿 - bazhongren的博客 - CSDN博客 这里我需要说明一点:就是这两篇介绍的继承类方法在新版BlockCanary里面的方法名 字已经变更了,但其他是没什么变化的
- RxJava
- 目前最好的RxJava入门文章,没有之一:给初学者的RxJava2.0教程(一) - 简书 以及对应的项目教程源码:ssseasonnn/RxJava2Demo
- 这可能是最好的RxJava 2.x 教程(完结版)- 简书
- 其他RxJava文章推荐:RxJava2 学习资料推荐
- RxJava之过滤操作符 - 行云间 - CSDN博客
- RxJava2使用过程中遇到的坑 - CSDN博客
- 这是一份全面 & 详细 的RxJava操作符 使用攻略
- RxPermissions-动态申请权限
- RxPermissions获取运行时权限 - 简书
- 当用户选择了“不再提示+拒绝”之后的处理,只能移步到系统设置去打开权限了
- 在onResume()中处理监听到设置了禁止后不再询问
- 联网框架:OkHttp
- Okhttp解析(一)请求的分发,拦截 - 简书
- Okhttp解析(二)网络请求的执行 - 简书
- Okhttp解析(三)网络连接的管理 - 简书
- Okhttp解析(四)网络连接的建立 - 简书
- Okhttp解析(五)缓存的处理 - 简书
- Android网络编程(六)OkHttp3用法全解析 | 刘望舒的博客
- 关于OkHttp3无法再通过OkHttpClient.cancel(tag)形式来取消请求,我身边挺多小伙伴纷纷还是使用OkHttp2.x问题,我个人认为技术始终需要更新,并非因为一个 简单的理由就让你停滞,在这里我参考了以下的文章进行取消:
- 关于取消OkHttp请求的问题 - 简书
- 上面这篇文章评论这句话说的特别有道理:其实cancel网络请求的时候,如果还未和服务器建立连接,它会回调到onFailure()方法中,但是还有一种情况就是它 会在onResponse的时候刚好cancel网络请求,那么它会在onResponse()方法中抛出java.net.SocketException: Socket closed
- Retrofit
- rxlifecycle-管理RxJava生命周期
- Gson-解析Json数据
- 关于使用Alibaba的fastJson或者Google的Gson框架,我个人更喜欢使用Gson框架, 不是因为fastJson不好,其实fastJson性能更优秀:Android总结之json解析 (FastJson Gson 对比)
- fastJson教程:Android okHttp网络请求之Json解析 - 总李写代码 - 博客园
- Gson教程(这个作者写的这四篇Gson文章真的很好):你真的会用Gson吗?Gson使用指 南(一) - 简书
- Glide
- glide-transformations
- 网上出现了很多Glide的图片变换开源库,其中做的最出色的应该要数glide-transformations这个库了
- Android图片加载框架最全解析(五),Glide强大的图片变换功能 - 郭霖
- Glide、Picasso、Fresco进阶 - 图像转换 - 简书
- 还是不会用Glide的话,那么推荐使用panpf/sketch: Sketch 是 Android 上一个 强大且全面的图片加载器,支持 GIF,手势缩放以及分块显示超大图片 无需关心TAG,因为根本就不使用TAG来关联,也自带多种图片处理效果,圆形的、圆角 的、高斯模糊的等等
- citypicker:yanzhenjie/AddressChecker
- AlipayZeroSdk-支付宝转账工具类
- 如何在app中打开支付宝进行打赏开发者 - CSDN博客
- 二维码可以在支付宝手机客户端或者网页支付宝条码支付 - 扫码 获取,得到的后面参数不太一样的,然后使用在线二维码解码器 解析出参数即可
- 这里也有很多人推荐使用第三方支付集成库易支付:EasyPay(易支付),两分钟集成三种Android支付方式 - 简书 ,开源项目地址:yansongda/easyPay - 码云 Gitee.com
PS:debug情况下使用stetho以及Watcher以及bugstag,release版本仅使用bugstag(原 项目使用bughd)
-
其实当AS升级到3.0之后,若项目之前用了类似retrolambda(原项目用了)或者Jack这种 旧方案的话,会出现以下提示告诉你移除相关的代码:
Warning:One of the plugins you are using supports Java 8 language features. To try the support built into the Android plugin, remove the following from your build.gradle: apply plugin: ‘me.tatarka.retrolambda’ To learn more, go to https://d.android.com/r/tools/java-8-support-message.html
-
之前的Gradle配置Android 开发之版本统一规范 或者android studio编程时出现的错误:Cannot get property 'XXXX' on extra properties extension as it does not exist - CSDN博客 ,都是直接在build.gradle里面配置的,第一次见另外起一个config.gradle来配置相关 信息的,但配置了大概之后sync一下就出现下面的bug:
Error:(4, 0) Cannot get property 'android' on extra properties extension as it does not exist Open File
- 解决办法:在Project的build.gradle首部加上 apply from: 'config.gradle'
-
一般项目在开发中使用OkHttp时候常用就是logging-interceptor来作为Log信息拦截 器,但还有就是使用FaceBook的stetho(它可以通过chrome的开发者工具从而辅助安卓开发) ,查阅了很久才搞懂,mark一下
-
看到那么多Utils工具类的时候,一般使用常用工具类可以试试Blankj大神的AndroidUtil
-
在原来的项目里面,清单文件里面的application标签里面出现下面两个属性
android:hardwareAccelerated="true" android:largeHeap="true"
这里我查阅了一下文章,安卓manifest中的android:largeHeap="true"作用 以及android学习——控制硬加速 hardwareAccelerated 在3.0才有的。
-
关于BaseApplication类引发的OnErrorNotImplementedException异常:
(BaseApplication.java:54) io.reactivex.exceptions.OnErrorNotImplementedException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' on a null object reference
我找了很久都没有找到是怎么回事,根据debug之后才发现是RxJava里面的bug,这里我注 销了BaseApplication类相关的代码,代码如下:
RxJavaPlugins.setErrorHandler(throwable -> { if (throwable != null) { PLog.e(throwable.toString()); } else { PLog.e("call onError but exception is null"); } });
-
关于权限申请问题,如下
java.io.FileNotFoundException: /proc/stat (Permission denied)
这个项目权限处理不够,不如之前模仿的项目五次元妹子 那么周全,这里我准备如下处理:
- 本来打算存入本地让LitePal进行查询,但目前的问题是raw/china_city.db写不进去 本地导致的,这里本来打算结合RxPermissions来弄的,可惜道行不够,被迫放弃,这里 选用了开源第三方库crazyandcoder/citypicker ,这里我把作者模块化city下面的类全注释了,这里开多了一个province模块
- 缓存文件也放到内置内存卡去,如下
sCacheDir = getApplicationContext().getCacheDir().toString();
- 天气数据:和风天气 | 好用的气象数据服务 天气数据分析 天气商业化解决方案
- 关于Weather实体设计的话,主要还是从和风天气那边的接口为准,在我码这个项目时候, 和风天气的天气接口已经s6了,这里我将会使用v5作为接口,实体设计参考https://free-api.heweather.com/v5/weather?city=CN101280103&key=b9e05332eea2426fb74de09c14c77227 或者seeweather/extra/weather.json文件(接口请求回来的),这里我有必要吐槽和 风天气,老是淘汰旧接口而不断换用新接口,除了增加特性之外,我更觉得是为了清理旧 接口从而缓解服务器压力,所以建议使用Mob官网 - 为开发者提供各种数据以及API Service
- App内测:fir.im - 免费应用内测托管平台|iOS/Android应用内测分发
- 关于版本更新的话,fir会提供相关的接口,说明:fir.im - 版本查询 其中字段id是应用ID,我找不到"应用管理"的"基本信息",但在特定应用的URL找到,比 如:https://fir.im/apps/5a7425c1ca87a877b1a81c2a url中的apps/后面的一串数字便是应用ID;该接口返回的json数据可以参考json文件 seeweather/extra/version.json
- 定位服务:概述-Android 定位SDK | 高德地图API
- 一般国内都是使用高德以及百度地图居多,至于搜狗地图,呵呵(去哪儿用的是这家,坑爆了)
- 申请高德地图key时候,需要sha1以及PackageName,这里有讲哈:如何获取注册高德Key使用的SHA1值与PackageName ,这里keystore最好就是一个应用对应一个,重复的话会导致一些意外