Android-Tips
This is an awesome list of tips for android.
If you are a beginner, this list will be the first choice for you when you have a difficult time.
Welcome Star
and Fork
, your support is my greatest affirmation.
学习 Android 至今,大大小小的坑没少踩过,庆幸的是,在强大的搜索引擎与无私奉献的人们的帮助下,那些坑都顺利地被填平了。
为了日后在遇到同样的问题时,能免于再次搜索带来的麻烦,我养成了收藏书签的习惯,随着书签(Tips)的日积月累,我想,是时候该有这个项目了。
如果你是个 Android 新人,又不善于搜索或不知道从何开始,那么我相信这份列表,将会成为你的首选。
当然,这份列表并不完美,如果不幸,这里没有你所踩到的坑,或者对于某个问题你有更好的 Tips,欢迎与大家分享,让我们一起来维护这个项目!
你可以通过 Pull request 的形式进行提交,当然也欢迎 Star
与 Fork
:)
由于各种问题,给出的链接可能会无法正常访问。遇到这种情况欢迎大家提交 Issue,Contributers 也可以使用 Utils 里面的 URLChecker 来检测列表里链接的有效性,你可以选择更改为新的有效连接,或者把需要梯子的文章以 Markdown 的形式保存在 Utils/Content 目录下,并注明原文章链接和作者。
目录
- A
- B
- C
- D
- E
- F
- G
- H
- I
- J
- K
- L
- M
- N
- O
- P
- Q
- R
- S
- T
- U
- V
- W
- X
- Y
- Z
- Others
- Contributors
- Contact Me
A
Activity
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
ADB
- Installing ADB on Windows 7
- Android ADB常用命令
- Android开发调试工具ADB的使用
- Android通过Wifi来调试你的应用
- Adb connection Error:远程主机强迫关闭了一个现有的连接
Adapter
- Android简便通用的SimpleBaseAdapter
- Android 快速开发系列 打造万能的ListView GridView 适配器
AIDL
- android进程间通信:使用AIDL
- Android AIDL使用详解
- android跨进程通信(IPC): 使用AIDL
- Android中的跨进程通信的实现(一)——远程调用过程和aidl
- Android Studio下如何配置AIDL文件
AlarmManager
- Android AlarmManager实现不间断轮询服务
Android-Async-Http
- Asynchronous Http Client for Android
- 快速Android开发系列网络篇之Android-Async-Http
- android-async-http框架库使用基础
Android Studio
- Android Studio导入项目
- Android Studio 简单设置
- Android Studio 简介及导入 jar 包和第三方开源库方法
- Android Studio使用技巧系列教程(一)
- Android Studio中如何使用Git和Github来管理项目
- Android Studio 权威教程
- 倍数提高工作效率的Android Studio奇技
- Android Studio 快捷键(Windows)
- Android Studio详细教程汇总
- Android Studio有什么奇技淫巧
AQuery
- AQuery Image Loading
- Android之使用Android-query框架进行开发(一)
AsyncTask
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- Android中AsyncTask的简单用法
- Android开发者:你真的会用AsyncTask吗?
- 深入解析AsyncTask,多例子版
Annotations
- AndroidAnnotations框架入门教程一之介绍
- How to stop an animation (cancel() does not work)
Android 6.0
- Android6.0运行时权限简介
- Android 6.0 - 动态权限管理的解决方案
- 聊一聊Android 6.0的运行时权限
- Android6.0权限系统
B
Bitmap
- 图片处理
- Android中自定义布局中加载图片BitmapFactory.options详解
- Android学习笔记进阶16之BitmapShader
- Android 优化Bitmap避免OutOfMemoryError
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
Broadcast
- 【Android】BroadCast广播机制应用与实例
- 玩转Android---组件篇---Broadcast Receiver(广播接收器)
- 【Android】动态注册广播接收器
C
Canvas
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
Callback
- How to Define Callbacks in Android?
- 一个经典例子让你彻彻底底理解java回调机制
- Java设计模式-回调函数和观察者模式
CardView
- Android5.0新控件CardView的介绍和使用
- Android CardView Example
- Android CardView Widget – Add Cards to a List using RecyclerView
- CardView在API 21以下的圆角效果处理
Configuration Change
- Android Configuration change引发的问题及解决方法
- Handling Runtime Changes
Context
- android学习—— context 和 getApplicationContext()
- Android中Context详解 ---- 你所不知道的Context
- Difference between getContext() , getApplicationContext() , getBaseContext() and “this”
CoordinatorLayout
- CoordinatorLayout与滚动的处理
- Handling Scrolls with CoordinatorLayout
D
Download
- Download a file with Android, and showing the progress in a ProgressDialog 译文
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】
- Java 多线程断点下载文件
- Android 后台Service下载 (一)
- Android网络编程 --断点续传下载文件
- android 多线程断点续传下载 一
DownloadManager
- Android DownloadManager 的使用
Dagger
- Dagger on Android-Dagger2详解
- 使用Dagger 2进行依赖注入
E
EventBus
- EventBus使用详解(一)——初步使用EventBus
- 快速Android开发系列通信篇之EventBus
- Android EventBus实战 没听过你就out了
F
Fragment - 碎片
- Android Fragment完全解析,关于碎片你所需知道的一切
- Android Fragment 你应该知道的一切
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
- 处女男学Android(九)---Fragment进阶篇之Fragment生命周期和回退栈
- Fragment笔记整理
- Android实战技巧:Fragment的那些坑
- android Fragments详解四:管理fragment
- Android Fragment 嵌套使用(Nested Fragments)
- Fragment MyFragment not attached to Activity
- Fragment全解析系列(一):那些年踩过的坑
- onActivityResult is not being called in Fragment
Fresco
- Fresco学习笔记
- why use fresco datasource to get bitmap is empty
- Always cannot show the images when loading lots of bitmaps on screen
- SimpleDraweeView did not recycled in RecyclerView
- Fresco-Facebook的图片加载框架的使用
- Resizing and Rotating
FlowLayout - 自定义流布局
- Android 自定义ViewGroup - 实现FlowLayout - 本文出自【张鸿洋的博客】
G
Glide
- Glide 一个专注于平滑滚动的图片加载和缓存库
- Google推荐的图片加载库Glide介绍
Gradle
- 用Gradle 构建你的android程序
- Android Studio系列教程四--Gradle基础
- 使用Gradle构建Android项目
- 使用Gradle管理你的Android Studio工程
- 灵活强大的构建系统Gradle
- Gradle Android Could not find method testPackage()
- Android Studio 1.0 Gradle Error with getConfiguration()
- Android打包的那些事
- 深入理解Android之Gradle
- gradle build fails on lint task
- “Gradle Version 2.10 is required.” Error
greenDao
- ORM 框架之 greenDAO 使用心得
- SQLite数据库框架ORMLite与GreenDao的简单比较
- 在AndoridStudio中引入GreenDAO
- gradle脚本集成greendao-generator生成android端greendao
GridView
- Android入门第八篇之GridView(九宫图)
- 用Volley让GridView加载网络图片
- Add space to top and bottom of GridView
H
Hotfix
- Android热更新实现原理
- Android App 线上热修复方案
- Nuwa
- Android 热补丁动态修复框架小结
- 安卓App热补丁动态修复技术介绍
Handler
- Handler和他的小伙伴们
I
ImageView
- [Android] ImageView.ScaleType设置图解
Immersive Full-Screen Mode
- Using Immersive Full-Screen Mode 译文
Intent
- Android系列教程之十:Intents and Intent Filters(一)
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Intent filter 关于Action、Category属性详解---附带实例源码
- startActivityForResult用法详解
- Android 开发笔记——通过 Intent 传递类对象
J
Java 8
- Modern Java - A Guide to Java 8
- Java8系列 - Java8简明指南
JSON
- Android系列---JSON数据解析
- android json解析及简单例子
- Android开源库--Gson谷歌官方json解析库
- DataContract4A-简化Json解析与生成
JNI
- Hello JNI
K
Kotlin
- Using Kotlin for Android Development
- Kotlin: Java 6 废土中的一线希望
- Kotlin 语言高级安卓开发入门
- Kotlin的黑魔法
- Learn Kotlin with Keddit
- Coding Android Apps in Kotlin
- Kotlin 一门强大的语言
- kotlin 学习
- Kotlin从入门到『放弃』系列 视频教程
L
largeHeap
- 探究android:largeHeap
ListFragment
- Android App组件之ListFragment -- 说明和示例
- Android 使用ListFragment显示列表
ListView
- 在Activity中响应ListView内部按钮的点击事件
Log
- Logger工具类
- KLog
M
MessageDigest
- Java利用MessageDigest获取字符串或文件MD5详解
- 类 MessageDigest
Material Design
- Google Material Design: Everything You Need to Know
- An exploration in Material Design
- 谢谷歌大神传我动画设计30年功力
- Codelab for Android Design Support Library used in I/O Rewind Bangkok session
MVP
- 浅谈 MVP in Android
- Android中的MVP
- 开源项目Philm的MVP架构分析
- 一种在android中实现MVP模式的新思路
- 说说Android的MVP模式
N
NavigationView
- Easy Navigation Drawer with Design Support Library
Notification
- Android——Notifications笔记
- Android学习之Notification的简单使用
O
ORMLite
- Android 快速开发系列 ORMLite 框架最佳实践
- Android ORM框架之 ORMLite
OkHttp
- 开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载
- Android OkHttp完全解析 是时候来了解OkHttp了
P
Parcelable
- Android中Parcelable接口用法
PackageManager
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- Android获取已安装应用信息(图标,名称,版本号,包)
- 关于android 如何安装 assets文件下的apk
Palette
- Extracting Colors to a Palette with Android Lollipop
- Android Lollipop 新特性 - Palette
PopupWindow
- http://wuxiaolong.me/2015/09/02/SharePopupWindow/
Preference
- PreferenceActivity(首选项设置页)
- Android的设置界面及Preference使用
Picasso
- Picasso官方网站及javadoc
- Android图片下载缓存库picasso解析
R
React Native
- React Native for Android 入门老虎
- React Native For Android初体验
- React Native for Android 实践 -- 实现知乎日报客户端
- React Native Android 踩坑之旅
Reference
- Java的引用StrongReference、 SoftReference、 WeakReference 、PhantomReference
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
RecyclerView
- RecyclerView使用详解(一)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- A Guide to Android RecyclerView and CardView
- Android-RecyclerView-Item点击事件设置
- Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?
- Create RecyclerView with multiple view type
- Simple RecyclerView Divider
Retrofit
- 我对Retrofit的认识
RxJava
- RxJava: Reactive Extensions for the JVM
- 给 Android 开发者的 RxJava 详解
- NotRxJava懒人专用指南
- 小试RxJava
RxAndroid
- IllegalStateException onError
RandomAccessFile
- Java RandomAccessFile用法
S
SearchView
- 详细解读Android中的搜索框(三)—— SearchView
Serializable
- Android系统中Parcelable和Serializable的区别
- Android: Difference between Parcelable and Serializable?
Service
- Android Service完全解析,关于服务你所需知道的一切(上)
- ExecutorService 的理解与使用
- Android基本功:IntentService的使用
- Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信
SharedPreference
- Android SharedPreferences使用以及原理详解
- Google为何这样设计OnSharedPreferenceChangeListener
- SharedPreferences在多进程中的使用及注意事项
- What's the difference between commit() and apply() in Shared Preference
SparseArray
- Android应用性能优化之使用SparseArray替代HashMap
- Android SparseArray
- Android性能优化之使用SparseArray代替HashMap
- HashMap的实现与优化
SQLite
- Android中SQLite应用详解
- ANDROID开发之SQLite详解
- 使用嵌入式关系型SQLite数据库存储数据
- Android将数据库保存到SD卡的实现
Support Library
- Android Support兼容包详解
- Android各个Support Library介绍
- Android Support Library 23.1的变化
SwipeRefreshLayout
- Android SwipeRefreshLayout
- 下拉刷新之 swipeRefreshLayout
T
Textview
- Remove underline from links in TextView
- What is the default text size on Android?
- Which unit of measurement does the Paint.setTextSize(float) use?
- How to set unit for Paint.setTextSize()
- Android Center text on canvas
TouchEvent
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- Android Deeper(00) - Touch事件分发响应机制
Thread
- ThreadPoolExecutor运转机制详解
- ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
- Java并发编程:Callable、Future和FutureTask
- Java 7之多线程线程池 - Callable和Future
- Java 7之多线程线程池 - 线程池原理(1)
- Android线程间交互(Java synchronized & Android Handler)
- Android--多线程之Handler
- Java(Android)中线程池的使用
- Java(Android)线程池
U
Unit Test
- Android单元测试
- Don’t Test Blindly: The Right Methods for Unit Testing Your Java Apps
- 在Android Studio中进行单元测试和UI测试
URL Routing - 路由协议
- Android路由框架设计与实现
- UrlRouter路由框架的设计
- 需要给activity跳转增加路由么?
- 通过 URL 打开 Activity
V
ViewPager
- Android ViewPager使用详解
- ViewPager + Fragment实现滑动标签页
- 【移动开发】Android中Fragment+ViewPager的配合使用
- Android 手把手教您自定义ViewGroup(一)本文出自:【张鸿洋的博客】
- Android的坑之ScrollView嵌套ViewPager
- IllegalStateException: The application's PagerAdapter changed the adapter's content without calling PagerAdapter#notifyDataSetChanged
View
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android中View绘制流程以及invalidate()等相关方法分析
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
- Android开发:LayoutParams的用法
- Saving Android View state correctly
ViewFlipper
- Android ViewFlipper的使用分析
- Android 滑动效果入门篇(一)—— ViewFlipper
VideoView
- Android--使用VideoView播放视频
- Playing a video in VideoView in Android
- Position Video Inside a VideoView
Volley
- Android Volley
- Android Volley完全解析(一),初识Volley的基本用法
- Android库Volley的使用介绍
- 网络请求库Volley详解
- Volley 源码解析
- 使用okHttp、Volley、Gson快速组装HttpClinet
W
WebView
- Java 与 JavaScript 如何进行交互
- Android与js交互实例
- Android中Java和JavaScript交互
- 顶部带进度条的Webview
- Android WebView播放视频问题
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- 在WebView中如何让JS与Java安全地互相调用
- Android WebView的Js对象注入漏洞解决方案
- Android WebView播放视频问题
Others
Code Style
- Java编程规范
- Android 命名规范 (提高代码可以读性)
- Code Style Guidelines for Contributors
Git
- Pro Git
- GitHub秘籍
- git - 简易指南
- 基于Github参与开源项目指南
- 使用git和github进行协同开发流程
- 如何高效利用GitHub
- 廖雪峰的GIT入门教程
- GitHub&Git入门基础
- git-flow 备忘清单
JCenter
- Android Studio发布项目到Jcenter
- 将Library上传到Jcenter
- 使用Gradle发布aar项目到JCenter仓库
JitPack
- 优雅的发布Android开源库(论JitPack的优越性)
反编译
- android_smali语法学习
- apk的包名修改
- 为Sublime Text安装smali代码语法高亮插件
- Android APK反编译详解(附图)
- Android开发学习总结(六)—— APK反编译
- 我是如何使用Android反编译软件的?
- Android程序的反编译对抗研究
设计模式
- Java开发中的23种设计模式详解
- MVC,MVP 和 MVVM 的图示
- 如果让我重新设计一款Android App
- 一个人如何开发一款 App?
- Android应用架构 (Android Dev Summit 2015)
- Android源码设计模式分析项目
夜间模式
- Android Night Mode 夜间模式实现
- Android夜间模式实现
- Android 中 知乎日报和知乎设置夜间模式是怎么样做到不重启Activity的?
自定义控件
- Android 自定义View及其在布局文件中的使用示例
- 自定义控件进阶:declare-styleable重用attr
- android 自定义控件 使用declare-styleable进行配置属性(源码角度)
- Android使用AttributeSet自定义控件的方法
- 从源码中浅析Android中如何利用attrs和styles定义控件
- Android SDK: Creating Custom Views
- Creating custom and compound Views in Android - Tutorial
- Tutorial: Enhancing Android UI with Custom Views
- Android 自定义View (一)
- What does postInvalidate() do?
- When it's necessary to execute invalidate() on a View?
- Android笔记:invalidate()和postInvalidate() 的区别及使用
No category
- THE DEX 64K LIMIT IS NOT A PROBLEM ANYMORE, ALMOST
- Android 4.4从图库选择图片,获取图片路径并裁剪
- 浅析android应用增量升级
- Android四大基本组件介绍与生命周期
- Android代码优化——使用Android lint工具
- Android 插件化 动态升级
- Java String StringBuilder StringBuffer
- tools:context=".MainActivity的作用
- 关于APK瘦身值得分享的一些经验
- 性能优化之数据库优化
- How to check visibility of software keyboard in Android?
- android 4.4.4侧滑退出显示app启动界面
- How to get a Color from hexadecimal Color String
- 【译】Android应用架构
- Android静默安装实现方案,仿360手机助手秒装和智能安装功能
- How to convert a color integer to a hex String in Android?
- IllegalArgumentException: width and height must be > 0 while loading Bitmap from View
- Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication ?
- Unknown URL content://downloads/my_downloads
- Android开发之实现多次点击事件
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- Android获取手机型号,系统版本,App版本号等信息
- 你需要知道的Android拍照适配方案
- Can't create handler inside thread that has not called Looper.prepare()
Contributors
- troyliu0105
- whiskeyfei
- pingfanganwei
- whilu
- yy1300326388
- ichenkaihua
- wavever
- windog
- Henryzhugithub
- Dimon94
- nitta-honoka
Contact Me
If you have any questions or want to make friends with me, please feel free to contact me : imtangqi#gmail.com