发呆便签是一款极简的便签软件,却又绚丽多彩。
- 【便签夹分类】 让你的生活井然有序
- 【图文编辑】 不只是单调的文字
- 【私密便签】 方便且安全
- 【废纸篓功能】 世上是有后悔药的
- 【涂鸦功能】 我是画画的小行家
- 【天气预报】 今天你带伞了吗
App体验:Todolist - fir.im
- 命名规范:
- 主要参考Blankj:Android 开发规范(完结版) - 简书
- 《阿里巴巴Java开发手册》 以及解读版:阿里巴巴java开发手册解读1-命名规约|香辣猪蹄儿
- 《阿里巴巴Android开发手册》
- Java基础:
- Android基础:
- Android基础知识复习:
- 四大组件:
- 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)
- Material Design:
- Android Theme.AppCompat 中,你应该熟悉的颜色属性 - 简书 这家伙的关于MD文章也是值得一看的,简短but精辟
- Toolbar:
- CoordinatorLayout(本身就是一个加强版的FrameLayout)可以监听其所有子控件 的各种事件,然后自动帮助我们做出最为最为合理的响应 <--(寄生) AppBarLayout (垂直的LinearLayout加强版),它在内部做了很多滚动事件的封装 <--(寄生) CollapsingToolBarLayout(可折叠式标题栏)
- RecyclerView:
- SwipeRefreshLayout:
- NestedScrollView :NestedScrollView的使用 - CSDN博客
- 看不懂物料设计的话建议买郭霖先生的《第二行代码》好一点,这本书内容对于初级 开发者来说还是蛮不错的
- 异步消息机制:Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- 通知:Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它) 以及如何检测应用通知权限?如何跳转通知权限设置页? - 掘金
- 拍照以及选择图库:Android 7.0调用相机拍照,返回后显示拍照照片 - CSDN博客 以及 android打开系统图库终极适配 - CSDN博客
- 矢量图:SVG 的 PathData 在 Android 中的使用 - CSDN博客 以及 Android:获取并制作矢量图动画 - Android - 掘金
- 文本合成图片:在代码中合成图片然后分享 - Android开发过程中的一些个人总结
- Android进阶
- Android换肤:
- Android混淆:Android混淆备忘录 - 简书
- Gradle:
- LruCache (最近最少使用)
- Span 使用
- 内存泄漏:Android内存优化(三)避免可控的内存泄漏 - CSDN博客
- 注解:
- 注解就是元数据,即一种描述数据的数据,可以描述类、方法、参数、变量、构造器及包声明中的特殊修饰符。
- 元注解(在 java.lang.annotation提供了四种元注解):
- @Documented –注解是否将包含在JavaDoc中 :
- @Target? –注解用于什么地方 :JDK5.0新特性Annotation之自定义注解和@Target注解和@Documented注解
- @Retention –什么时候使用该注解 :JDK5.0新特性Annotation之@Retention注解
- @Inherited – 是否允许子类继承该注解:JDK5.0新特性Annotation之@Inherited注解
- android注解入门 并来自己写一个框架 - CSDN博客
- Android 注解指南 - Android - 掘金
- bugtags-移动时代首选 Bug 管理系统:Bugtags 使用说明 - CSDN博客
- Blankj/AndroidUtilCode:终于等到你--权限工具类 - 简书
- 偶然在掘金看到也比较好的utils库:linqssonny/Utils
- ButterKnife:
- LitePal:
- Android数据库高手秘籍(一)——SQLite命令 - 郭霖的专栏 - CSDN博客 以及 LitePal 1.6.0版本来袭,数据加解密功能保障你的应用数据安全
- LitePal使用心得(这里指的是 1.6.1 版本):
- 实体private 、public、 public final 类型,LitePal都会存储,无需生成 getter/setter 方法(其实就是默认存储实体中所有的字段/属性,如果不想存储, 则设置使用@Column()中的ignore 属性)
- 字段/属性 在数据库中一律使用小写存储,所以我们在 crud 时候可以忽略字段大小 写操作,不过在查询时候如果where(" name=? ", name),如果 name (这个字段为 String) 为 null 就会报错 "org.litepal.exceptions.DataSupportException: the bind value at index 1 is null"
- Litepal 的注解 @Column(),里面有 nullable,unique,defaultValue,ignore
四种方法
- unique: 比如taskId设置了unique,当存储(save()方法)时候,数据库如果已经 有该taskId,那就不存储(save() 方法返回 false)
- Gson-解析Json数据:你真的会用Gson吗?Gson使用指南(一) - 简书 ,这个作者写的Gson系列教程很好,值得拜读
- Rx系列
- 实战:rengwuxian/RxJavaSamples: RxJava 2 和 Retrofit 实战
- RxJava:
- 目前最好的RxJava文章,没有之一:给初学者的RxJava2.0教程(一) - 简书
- 其他RxJava文章推荐:RxJava2 学习资料推荐
- RxJava的观察者模式(二) - 简书
- RxJava之过滤操作符 - 行云间 - CSDN博客
- RxJava之转换操作符 - CSDN博客
- RxJava2.0你不知道的事 - 简书
- RxLifecycle:解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析 -
CSDN博客
- 其中 RxLifecycle 已经推荐使用 AutoDispose :Android架构中添加 AutoDispose解决RxJava内存泄漏 - CSDN博客
- RxPermissions:使用RxPermissions(基于RxJava2) - CSDN博客
- 关于Android权限知识详解:
- Android自定义权限与使用
- Android 运行时权限功能 - 针对6.0 / Android M 以上系统而言
- 作用:用户不需要在安装软件的时候一次性授权所有申请的权限,而是可以在软 件的使用过程中再对某一项权限申请进行授权。比如说一款相讥应用在运行时申 请了地理位置定位权限,就算我拒绝了这个权限,但我应该依然可以使用这个应 用的其他功能,而不是像之前那样直接无法安装它。
- 运行时权限的核心:说白了就是在程序运行过程中由用户授权我们去执行某些危 险操作,程序是不可以擅自做主去执行这些危险操作的。注意:我们在进行运行 时权限处理时使用的是权限名,但是一旦用户同意授权了,那么该权限所对应的 权限组的其他权限也同时被授权。
- 基础篇:《Android 第一行代码》 里面第7章的开头,其对应的源码:RuntimePermissionTest 或者 Android 6.0权限管理及最佳实践 - 简书
- 全面篇:Android 6.0 运行时权限处理完全解析 - CSDN博客
- 实战篇:Android权限管理详解 - CSDN博客
- 补充篇:关于Android 6.0 运行时权限 | Android Notes 以及 targetSdkVersion 23以下6.0中调用checkSelfPermission的问题 - 海阔天空玩世不恭
- 关于Android权限知识详解:
- Retrofit
- Glide
- BaseRecyclerViewAdapterHelper:BRVAH官方使用指南(持续更新) - 简书
- PhotoView : android 开源photoView的使用 - 简书
- LockPattern : zhuanghongji/LockPattern: Android 九宫格图案解锁源码解析
- Android开发Tips :
- Android 性能优化:
- Bitmap 使用:
- 摆脱AsyncTask:
- 用RxJava.Observable取代AsyncTask和AsyncTaskLoader-RxJava Android
- 详细解读AsyncTask的黑暗面以及一种替代方案 - 简书
- 第二篇只是让你知道 AsyncTask 的弊端,最建议使用RxJava 来解决
- 使用 Channel 或者 okio 提升读写能力
- Okio:大概是最完全的Okio源码解析文章 - 简书
- Channel:通俗编程——白话 NIO 之 Channel - 后端 - 掘金
- 下面这bug解决办法,传送门;[译文]Android Studio 3.0 发行说明 - CSDN博客
其实就是@android 前面的"@"去掉就好
Error:(42, 5) error: style attribute '@android:attr/windowEnterAnimation' not found. Error:(42, 5) error: style attribute '@android:attr/windowExitAnimation' not found.
- 在做三级联动省市区选择里面,一般都是采用第三方库居多一点,但存在或多或少的问题, 比如数据太大导致很多时间等待甚至导致ANR、它提供的数据很多用不上(不可以更改数据) ,所以很难找到适合的这类开源库,哈哈哈,还是让我扎到了,看这里:yanzhenjie/ AddressChecker: MD风格的地址选择器
- 出现下面这个问题一般都是打包使用了注解而引发的问题:
Warning:com.trello.rxlifecycle2.LifecycleProvider: can't find referenced class javax.annotation.Nonnull
Warning:com.trello.rxlifecycle2.LifecycleProvider: can't find referenced class javax.annotation.CheckReturnValue
rxlifecycle2作者已经给出了解决方案:can't find referenced class javax.annotation.Nonnull · Issue #228 · trello/RxLifecycle
-
开发中经常发现软键盘一旦弹起来,界面会相对应向上弹,但很遗憾就是有时候不尽人意, 只要往清单文件 AndroidManifest 里面对应的 Activity 配置
android:windowSoftInputMode="adjustResize"
-
RxJava中map()操作符里面的线城是在下游线程进行操作的,即observeOn()所订阅的线程
-
在开发中遇到了就是保存图片到本地,但是本地图库没有刷新,查看了网上才知道需要发送 广播通知图库进行获取的:Android保存图片到系统相册 - CSDN博客
-
在开发过程中,在 sutsupportActionbar(toolbar) 之后,调用 toolbar.setTitle() 设置标题无效,解决办法:为什么 Android 中 Toolbar.setTitle() 没有效果
-
打签名正式包出现以下这种情况:
Error:Execution failed for task ':app:validateSigningRelease'. > Keystore file E:\acode\Android_Studio\Todolist\app\todolist.jks not found for signing config 'externalOverride'.
其实就是你的 jks 密钥配置的路径不对,AS找不到,检查一下路径即可 参考博客:build - Android Error Building Signed APK - Stack Overflow
-
之前一直以为Activity的Intent传值没有大小限制,但项目中传bitmap的byte[]数组, 出现如下的异常(这里可能会报多个异常,但最核心就是下面这句话了)
Caused by: android.os.TransactionTooLargeException: data parcel size 1808828 bytes
- 关于Intent的大小问题,这篇是解析Intent传值限制的最好文章:Activity之间使用 intent传递大量数据带来问题总结 - CSDN博客
- 关于常见异常,可以查看:Binder异常解析 - Gityuan博客 | 袁辉辉博客
- 解决办法:
- 使用 EventBus 或者 RxBus 传送,参考博客:Intent传递大量数据出现
TransactionTooLargeException异常的解决方案
- RxBus :
- 这里需要一点RxJava的知识,看上面用到框架Rx系列那里,那里有教程
- 用RxJava实现事件总线(Event Bus) - 简书
- [深入RxBus]:异常处理 - 简书
- [深入RxBus]:支持Sticky事件 - 简书
- RxBus :
- 把图片存到本地,然后传送图片路径或图片 uri过去
- 本项目采用这种,好处就是:ShareActivity里面涉及了分享到第三方应用的功能 ,该功能(分享时候使用的是图片的 Uri,即需要保存到图片保存到磁盘上),在 跳转到 ShareActivity 之前的界面就已经生成图片了,那么可以提前保存啦
- 因为本需求是当开始 ShareActivity 开启之前就生成图片了(即观察者在被观
察者发送了普通消息(相对于粘性事件)之后才进行订阅,那么观察者就获不到之
前的消息,由于目前的 Rxbus 不支持粘性事件,毕竟粘性事情涉及严重内存泄漏
- 关于普通事情以及粘性事件的区别,看这里:Android事件总线(一) EventBus3.0用法全解析 - CSDN博客
- 使用 EventBus 或者 RxBus 传送,参考博客:Intent传递大量数据出现
TransactionTooLargeException异常的解决方案
-
这里在导入zhuanghongji/LockPattern: Android 九宫格图案解锁源码解析,"程序锁"模拟场景使用 的时候,设置好图案密码之后会再进入会报mPoint为null从而导致崩溃,这里修正办法: 将LockPatternView 类中的 isInitPoint 变量不要设置为静态即可
-
当我打开settingFragment时候,老是出现下面这个问题:
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Boolean at com.yueyue.todolist.modules.setting.SettingFragment.onCreate(SettingFragment.java:81)
其实这个问题我在伟大的android - java.lang.Integer cannot be cast to java.lang.String on addPreferencesFromResource - Stack Overflow 里面找到了解决办法,我这里的问题是之前的缓存存储错误,存储到都是Boolean类型,但 Fragment想拿Integer,那么就GG了,解决就是每次调试时候,手机先卸载旧版本
-
我测试使用的手机小米4C安装到使用都没有什么问题,决定在掘金沸点宣传,但很遗憾得到 魅族手机 MX5 等机型会闪退崩溃
android.view.InflateException: Binary XML file line #36: Error inflating class android.support.design.widget.FloatingActionButton
之后我便在InflateException with FloatingActionButton from Official Design Library 找到了解决办法,把FloatingActionButton的属性 "android:backgroundTint" 改为 "app:backgroundTint" 即可
-
当用户选择地址时候出现一片空白,报错如下:
Attempt to invoke virtual method 'java.lang.String com.yueyue.todolist.modules.address.b.a.a()' on a null object reference at com.yueyue.todolist.modules.address.ui.AddressCheckActivity.a(AddressCheckActivity.java:264)
这里当时没有考虑到地址为null选择的问题,现在做了判空处理,修复了这个问题
- 由于本人理解换肤方面的知识没有透彻,去掉换肤功能