1. Rest
1.1 序列化json自动命名:
json中如果有下划线命名的key,例如 user_name
, 但是java代码中希望是驼峰式的命名,例如userName
, 如果使用Gson解析可以设置LOWER_CASE_WITH_UNDERSCORES
属性
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create()
或者添加SerializedName
的Annotation
@SerializedName("user_name")
private final String userName;
2. 裁切图片
- Android提供了
com.android.camera.action.CROP
用来裁切图片,但是不同设备上的表现不同,可能引起难以预料的bug。为了解决这个问题,应该使用下面的第三方库.(来自commensware) - https://github.com/lvillani/android-cropimage
- https://github.com/biokys/cropimage
- https://github.com/MMP-forTour/cropimage (forked from the above one)
- https://github.com/dtitov/pickncrop
3. 资源
- 资源可以使用
res.srcDirs = ['src/main/res'_pagea, 'src/main/res_pageb']
将资源分在不同的文件夹中
4. View
4.1 View的属性
- android:fillViewport
4.2 获取当前横竖屏状态
4.3 requestLayout子类没有调用onLayout
4.4 获取子控件相对于父View的位置
4.4 Activity属性
- windowSoftInputMode
- 原来窗口resize
- 原来窗口不变 adjustSpan
- 原来窗口位移
5. 清除数据
6. AlarmManager
- alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(10*1000), pi);
7. 调试
7.1 无法调试
- 开发者模式中,选择正在调试的应用
解决同步依赖库太慢问题
- 使用sonatype Nexus配置代理: (Remote Storage Location: https://jcenter.bintray.com/)
- 使用oschina的代理: maven.oschina.net
使用stetho可以更方便地调试
8. Gradle
8.1 防止gradle每次都下载
- 在官网下载安装包,然后加入系统变量,接着使用
gradle build
而不是.`/gradlew
8.2 加快gradle编译速度
-
gradle --daemon
代替gradle
9. 安卓系统开发
安装android ROM开发环境所需要的软件
sudo apt-get install git gnupg flex bison gperf build-essential
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown
libxml2-utils xsltproc
10. 让android studio可以在所有apps里被搜索到
- 复制下面的代码到
~/.local/share/applications
[Desktop Entry]
Comment=
Terminal=false
Name=Studio
Exec=$StudioPATH/studio.sh
Type=Application
Icon=$StudioIconPATH
11. 开发工具
11.1 adb 提示No such file or directory for existing executable
- 执行
sudo apt-get install libc6:i386 libstdc++6:i386
11.2 编译提示 make sure the aapt execute at *aapt can run successfully
- sudo apt-get install zlib1g:i386
gralde用本地的
修改.idea/gradle.xml
<option name="distributionType" value="LOCAL" />
<option name="gradleHome" value="$USER_HOME$/prog/gradle-2.10" />
12. 存储
12.1 SharedPreferences的commit()与apply()
SharedPreferences
类的.commit()
和.apply()
都可以提交数据,但是apply是异步的,不会阻塞当前线程,然而正因为是异步的,在某些异常情况下(例如程序异常退出)会导致数据没有保存到本地磁盘,引起一些bug,所以如果需要保证保存下来的话,建议用commit()