Android 杂记

组件间数据传递

  • 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、过度绘制)、主线程耗时操作、内存分配策略优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little-sparrow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值