AndroidTips

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. 清除数据

  • http://stackoverflow.com/questions/5744104/whats-the-difference-between-clear-cache-clear-data-in-android-settings

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

        

12. 存储

12.1 SharedPreferences的commit()与apply()

SharedPreferences类的.commit().apply()都可以提交数据,但是apply是异步的,不会阻塞当前线程,然而正因为是异步的,在某些异常情况下(例如程序异常退出)会导致数据没有保存到本地磁盘,引起一些bug,所以如果需要保证保存下来的话,建议用commit()

你可能感兴趣的:(AndroidTips)