Android 近期知识总结

来源:互联网 发布:数据标准大会 编辑:程序博客网 时间:2024/05/20 05:26

前言:要学习的东西还很多啊。这是近期的一些

1 开发的辅助知识

Gradle知识
看看stormzhang的相关博客。

混淆编译:
入门到精通 http://www.jianshu.com/p/7436a1a32891
http://www.jianshu.com/p/44e3b127393e

第三方库的导入和导出
http://www.csdn.net/article/1970-01-01/2824100
http://www.cnblogs.com/xxdh/p/6703746.html

JNI相关知识
http://www.jianshu.com/p/aba734d5b5cd

android代码规范:
http://www.jianshu.com/p/0a984f999592

注解的介绍:
http://www.cnblogs.com/punkisnotdead/p/4705258.html
Butter Knife 框架:
http://www.jianshu.com/p/9ad21e548b69
一些注解说明:
http://www.mamicode.com/info-detail-1892879.html

api = Build.VERSION_CODES.LOLLIPOP的理解

注释的介绍:
注释简介 http://www.jianshu.com/p/54e8964730b4
注释规范 http://blog.csdn.net/u011123714/article/details/45847169
此外可以看看《Java核心技术》的讲解
注释模板 http://www.cnblogs.com/linfenghp/p/5561639.html
注释模板 http://blog.csdn.net/zuiwuyuan/article/details/48201185
注释生成的方法:
1-方法注释:你在方法前输入/**然后一回车,自动帮你生成方法和参数的注释。
2-类注释:类注释可以自定义模板。
3-变量注释-大神们似乎都喜欢用文档注释方式,即在变量声明的上一行注释。做法同“方法注释”。

生成注释文档
http://blog.csdn.net/qq_28685759/article/details/69390125

一些快捷键的使用

异常处理:
比如什么情况下需要throw一个异常,什么时候需要捕捉异常(try……catch……语句)。
1-当你调用的接口在文档里明确表示可能有异常(如网络接口),你需要处理异常。有时候异常可以在回调参数里取得(如okhttp的onFailure方法),这时就不需要再写catch语句(底层已经帮你实现了catch),只需要编写捕捉到这个异常后的逻辑。可以比较一下httpURLConnection和okhttp的异常处理的区别。
2-自己写的逻辑,如果可能有异常,也需要做异常处理。尤其是读写、数据库交互之类的容易出现异常。
3-解读异常。查询官方文档可知Exception的构造由Message和Cause组成,可以通过getMessage和getCause来获取异常的原始情况(信息和原因)(这两个方法继承自Throwable类)。另外,可通过printStackTrace打印异常经过的路径。
4-断言的使用。暂时不用

日志:
采用android日志工具(Log)。
分为5个等级。养成良好的使用习惯。
快捷键:logv再tab可以生成v级别完整语句,其他4个类推。技巧,在onCreate外面输入logt再tab可以生成TAG常量。
可以使用自定义过滤器和等级过滤。
《第一行代码》说的自定义日志工具,可以在代码上线后屏蔽日志。我这种小软件就不需要了,而且自定义后不能使用快捷键。

调试:
《第一行代码》里的调试方法先用着,差不多够用了。

debug和release的深入:以后有时间看看。

2 基础知识

基础知识补全,如menu、SpannableString、如viewpager、TextView的textIsSelectable属性的使用等。
menu的知识:
http://www.cnblogs.com/smyhvae/p/4133292.html
关于ActionBar和ToolBar的一些知识,可以参考《第一行代码》,比如提到了HomeAsUp按钮。又比如为什么填充Menu时,设置为“showasaction=always”的会填充在右边,这些填充规则是什么。
SpannableString介绍:
http://www.jianshu.com/p/84067ad289d2
http://blog.csdn.net/u013309870/article/details/52830634
viewpager介绍:
http://www.jianshu.com/p/3f9cc4beb0ae
TextView的textIsSelectable属性:
http://blog.csdn.net/qq_33689414/article/details/52885651
alertDialog.builder和DialogInterface的知识:从ys破解过程中学到的。
可以参考这个系列:http://blog.csdn.net/harvic880925/article/details/42528663

service更新UI的方法:
handler法:http://blog.csdn.net/jycboy/article/details/46040189
广播法:http://www.jianshu.com/p/a274e17fc66a?winzoom=1这个项目就是用的广播法。
(子线程中更新UI的一种方法:使用广播。如小米手环程序的notifyUI)
context、activity、application、view之间的关系。
一些控件之间的继承关系,如Button与view的关系、与TextView的关系。
xml文件和class文件之间怎么串起来、布局和活动怎样的联系机制。
java的SDK与android的SDK有什么关系

设置透明度,颜色写成8为,前两位表示透明度。

动态注册广播的方法。要复习下啊。

使用application全局变量 与 本地文件 存储信息 的区别:
前者在进程被杀掉后,变量就没了。

SharedPreference在多进程中数据共享出了问题。commit和apply有区别!
又由于多进程不共享内存。但是Mode_MULT_Proccess还是可以用的,只是官方不推荐。

StopSelf 的执行方式:onStartcommand执行完才结束。

Get 和post 的区别。
https://www.zhihu.com/question/31640769
http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml
http://blog.csdn.net/fg313071405/article/details/42150227
看看RESTful原则(是一种风格,而不是标准)

地图数据:一般接口都是 先维度 后经度!!!!!

内部类里面使用外部类的变量,要将外部类变量声明为final (搞清为什么)

arrayList 要好好搞搞,size为0时,不能用size判断,直接判断此list是否为空。

AsyncTask的线程数、停止方法。

终止线程的方法,尤其是线程阻塞时。
http://www.cnblogs.com/luckygxf/p/4737655.html

自启动:
http://blog.csdn.net/u012400885/article/details/65515941

蓝牙编程:
http://www.jianshu.com/p/29a730795294
http://www.jianshu.com/p/a274e17fc66a?winzoom=1
以及对应的github项目。注意要开启位置服务,才能扫描到设备。这个坑真是浪费了我好多时间。权限真是个麻烦的事情,我用service实现这一套,竟然还要手动去将权限改为全部允许,搞得我程序一直莫名扫描不到蓝牙设备。哭死,在这里又耽误了3个小时。以后还是写个权限申请吧。
http://blog.csdn.net/vnanyesheshou/article/details/51554852
http://www.cnblogs.com/gooder2-android/p/6513799.html

系统蓝牙中取消配对(蓝牙配对的知识)。

ble要求最低API版本为18,我原先默认都是15,改一下了。

Android 6 以上的必须先打开定位,否则扫描不到。(在这里耽误了4小时)

开发时手环一直闪光,且手机扫描不到(B2手环开发遇到的问题)。
mBleManager.setScanListener遇到的问题(B2手环开发遇到的问题)。

权限申请:
http://www.jianshu.com/p/a51593817825

RxJava编程
http://gank.io/post/560e15be2dca930e00da1083

3 其他

android架构设计:
如MVP设计模式等等。在大型程序中,有必要学习一下。现在没时间,暂时先不看。架构这种东西,小项目反而会增加代码量,增加一些回调、监听之类的。
http://blog.csdn.net/ghost_programmer/article/details/49994761
http://www.cnblogs.com/pangguoming/p/5882630.html
http://www.jianshu.com/p/2ca7767df08c
http://blog.csdn.net/dfskhgalshgkajghljgh/article/details/51646250

反编译系列
smali2dex
下载:https://bitbucket.org/JesusFreke/smali/downloads/
参考方法:http://blog.csdn.net/wolinghuanyun/article/details/52516346
开始用新版本2.2.0的失败了(可能是java不兼容),后来用了2.1.3版成功了。命令:java -jar smali-2.1.3.jar -o 目标dex文件 [smali文件夹]
举例:将目录切换到一个文件夹,这里包含有smali-2.1.3.jar、由smali文件夹,然后执行: java -jar smali-2.1.3.jar -o classes0.dex smali
当然,也可以直接用目录指定来执行(指定smali.jar的路径、指定smali文件路径、指定输出文件路径)。

一个新工具:
https://github.com/linchaolong/ApkToolPlus
其他参考:
http://www.aichengxu.com/java/9755804.htm

multiDex系列:【Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’解决记录】
这个博客讲了一些,挺好,应该可行。
http://dditblog.com/itshare_590.html
但我的程序运行时还是挂了。最终我还是通过提取反编译技术,将jar包里重复的库删除,重新建立jar包。所以避免了这个错误。

Coolweather在gradle时报错
Error:Failed to resolve: com.android.support:support-annotations:26.0.2
且点击Install Repository and sync project无效
网上找到一个人说:在项目的build.gradle里面最上层填写这样一句话
configurations.all {
resolutionStrategy.force ‘com.android.support:support-annotations:23.1.0’
}
感谢:
http://blog.csdn.net/pyfysf/article/details/77894331?locationNum=3&fps=1

原创粉丝点击