组件间数据传递
- Activity向Activity传递数据:Intent携带的Bundle信息、静态变量,如果activity之间需要传递的数据量过大(1M - 8K),应该使用静态变量
- Activity向Service传递数据:Service绑定、Intent携带的Bundle信息
- Fragment向Activity传递数据:Activity实现回调接口,在onAttach中保存Activity实例、onDetatch中置空
- Activity向Fragment传递数据:通过setArguments方法
RecyclerView与ScrollView的区别
- 两者可以做滚动效果
- ScrollView里面只能放一个元素,RecyclerView可以放置很多元素
- ScrollView里面的东西是初始化好就在内存中,RecyclerView是只加载需要显示的内容
五种进程类型
- 前台进程(与用户正在交互的Activity或者Activity用到的Service)
- 可见进程(处于暂停状态的Activity或者绑定在其上的Service)
- 服务进程(其中运行着使用startService方法启动的Service,例如音乐播放程序)
- 后台进程(运行着执行onStop方法而停止的程序)
- 空进程(不包含任何组件的进程)
package name和application id的区别
- package name声明在Manifest中,主要用来替换类路径
- application id声明在build.gradle中,最终决定应用的包名
Java 类加载器
- 启动类:BootStrapClassLoader
- 扩展类:ExtClassLoader
- 系统类:AppClassLoader
- 自定义:CustomClassLoader
Android类加载器
- BaseDexClassLoader
- DexClassLoader
- PathClassLoader
安卓视图状态
enable 表示当前视图是否可用,不可用的视图无法响应 onTouch 事件和 onClick 事件,无法获取焦点,enable 属性不会影响 onTouchEvent 的返回值,只要视图是 clickable 或者 long clickable的,onTouchEvent 就会返回true;focus 用来表示当前视图是否获取焦点,需要注意touch模式下的FOCUS_IN_TOUCH_MODE;还有 selected 和 pressed 状态等
滑动列表卡顿问题
- 在SCROLL_STATE_IDLE时加载图片:Glide.resumeRequests
- 滑动时停止图片加载:Glide.pauseRequests
uses-sdk中各个参数的含义
- android:minSdkVersion : 如果系统本身使用的 API 级别低于该属性中指定的值,Android 系统将阻止用户安装应用
- android:targetSdkVersion : 用于指定应用的目标 API 级别的整数,如果未设置,其默认值与为
minSdkVersion
指定的值相等。该属性用于通知系统,您已针对目标版本进行测试,并且系统不应通过启用任何兼容性行为,以保持您的应用与目标版本的向前兼容性。例如,如果将该值设置为“11”或更高,系统便可在应用运行在 Android 3.0 或更高版本的平台上时对其应用新的默认主题 (Holo) - android:maxSdkVersion : 如果该属性中指定的值低于系统本身使用的 API 级别,则系统将不允许安装应用
- compileSdkVersion:编译时依赖的系统 API 版本
.9图规则
- 上边线:图像横向可拉伸的部分
- 左边线:图像纵向可拉伸的部分
- 右边线:图像纵向可填充内容(文字或图片)区域
- 下边线:图像横向可填充内容(文字或图片)区域
.9图注意事项
- 点九图只能被拉伸变大变长,不能被压缩变小变短,所以一定要制作尽可能小的点九图
- 点九图的拉伸区域可以是不连续的,用来避开一些不可以拉伸的区域
Context 上下文
Android 不同于 Java 一样,需要有一个完整的Context 环境,在绝大多数场景下,Context 都是可以通用的,不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog,出于安全原因的考虑,Android 不允许 Activity 凭空出现,而是要建立在另一个 Activity 基础之上,也就是以此形成的返回栈。而 Dialog 则必须在一个 Activity 上面弹出,除非是 System Alert 类型的 Dialog,因此在这种场景下,我们只能使用 Activity 类型的 Context,否则将会出错
getApplication 方法可以用来获取 Application 实例,但是该方法只能在 Activity 和 Service 中访问,如果想在 BroadcastReceiver 中获取 Application 实例,可以调用 getApplicationContext 方法
getBaseContext 方法得到的是一个 ContextImpl 对象,ContextImpl 正是上下文功能的实现类
卡顿监测
Choreographer.frameCallback:监测线上帧率(FPS)
sysTrace:卡顿分析
卡顿解决办法
布局优化(ViewStub、过度绘制)、主线程耗时操作、内存分配策略优化