前言:要学习的东西还很多啊。这是近期的一些
###1 开发的辅助知识
Gradle知识
看看stormzhang的相关博客。
Linux系统搭建Android Studio,需要提前安装JDK 之类的(Windows的android studio不需要,但是eclipse等也需要)。
Android开发的版本库管理,git往往是不够用的,需要repo,关于repo的介绍,可参考:https://blog.csdn.net/qugename/article/details/57463951
git管理单独的模块,而repo管理所有的git库,将多个git库组合在一起,形成一个完整的大版本。
第三方库的导入和导出
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中所谓的native method其实就是指JNI中的method。
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原则(是一种风格,而不是标准)
cookie的使用
https://blog.csdn.net/qq_33200967/article/details/71789740
也可参照如下代码.
获取服务器返回的cookie,需使用:cookie = response.header(“Set-Cookie”);
OkHttpClient client = new OkHttpClient();
try {
Response response = client.newCall(request).execute();
responseData = response.body().string();
try{
cookie = response.header("Set-Cookie");
} catch (Exception e){
cookie = "";
}
done = true;
} catch (Exception e){
e.printStackTrace();
}
设置cookie:需添加 .addHeader(“cookie”,cookie)
RequestBody requestBody = new FormBody.Builder()
.add("uid",uID)
.add("pwd",pwd)
.add("newpwd",newpwd)
.build();
Request request = new Request.Builder()
.url(formatURL("reset-pwd"))
.post(requestBody)
.addHeader("cookie",cookie)
.build();
final HttpTask s = new HttpTask(listener,request,true);
地图数据:一般接口都是 先维度 后经度!!!!!
内部类里面使用外部类的变量,要将外部类变量声明为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
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