lzd's blog


  • Home

  • Archives

  • Tags

Flutter 系列 - Dart 快速入门

Posted on 2020-03-01

概述

  • 强类型语言,静态类型。语法类似于 Java
  • 支持两种编译模式:
    • JIT: 即时编译,开发期间做到更快的编译和更快的代码重载。但也有劣势就是在运行时需要将代码编译为机械码,那么直观感受就是慢,所以我们在开发期间有时候会发现卡顿,但是打 release 包之后效果会变好。
    • AOT: 事前编译,release 期间已经编译为二进制代码,所以加载会更快更流畅。
Read more »

SKRecyclerViewAdapter 开源

Posted on 2020-03-01

SKRecyclerViewAdapter

Make RecyclerView.Adapter simpler

Support MutilType Layout , Kotlin, Functional Programming

Dependency

Include the library in your build.gradle

1
2
3
dependencies{
implementation 'com.lzd:skadapter:1.0.0'
}

Github : https://github.com/lzdon/SKAdapter

Read more »

RecyclerView 回收机制

Posted on 2018-07-20

主要方法

  • recycle
    • item 滑出屏幕时
  • findFromCache
    • item 出现在屏幕时

主要数据结构

  • mCachedViews
    • 最大个数为 2
    • FIFO
  • mRecyclerPool
    • SparseArray. key: itemType, value: ArrayList
    • value 的最大个数为 DEFAULT_MAX_SCRAP[5] ,可以修改
  • recycle -> putCacheView -> exceed limit? -> put recyclerPool -> exceed limit? -> discard

TIP

  • GridLayoutManager 的 spancout 如果大于 5 则需要调整 DEFAULT_MAX_SCRAP 的最大限制
  • 慎用 notifyDataSetChanged , 此方法会使所有的 ViewHolder 失效,itemCount - DEFAULT_MAX_SCRAP 个 item 会重走 onCreateViewHolder

Android gradle tools 3.X 中新的依赖方式

Posted on 2018-05-06

前言

2017年,Android studio 版本更新至3.0,连带着 gradle tools 工具也升级到了3.0.0,在3.0.0中使用了最新的 Gralde 4.0 里程碑版本作为 gradle 的编译版本,该版本 gradle 编译速度有所加速,更加欣喜的是,完全支持 Java8。当然,对于 Kotlin 的支持,在这个版本也有所体现,Kotlin插件默认是安装的。

Read more »

JVM相关面试题总结

Posted on 2018-03-04

一个关于内存的连环炮

内存分为哪几部分,这些部分分别都存储哪些数据?

名称 特征 作用
虚拟机栈 线程私有,使用一段连续的内存空间 存放原始类型的值、对象引用、局部变量表、操作栈、动态链接、方法出口
程序计数器 线程私有,占用内存小 存储字节码行号,用于分支、循环、跳转、异常、线程恢复等
堆 线程共享,生命周期与虚拟机相同 保存对象实例
方法区 线程共享 存储类加载信息、常量、静态变量等
Read more »

Apk打包流程

Posted on 2017-12-08

Read more »

ADB 常用命令

Posted on 2017-11-26

ADB

adb devices

列出连接的设备,多个设备指定设备 adb -s<设备序列号>

adb install -r [filePath]

安装APK,允许覆盖安装

adb shell

进入设备的shell界面

adb shell pm list packages -3

查看应用列表(第三方应用)

Read more »

Android 事件分发小结

Posted on 2017-11-18

View的结构

事件分发流程

  • Android的事件分发机制是一个非常典型的责任链模式:上层View可以选择自己拦截事件,也可以交给子View来处理,如果子View选择不处理事件还可以继续回传给父View。
  • 事件收集之后最先传递给 Activity, 然后依次向下传递
    Activity -> PhoneWindow -> DecorView -> ViewGroup -> ... -> View
  • 如果没有任何View消费掉事件,那么这个事件会按照反方向回传,最终传回给Activity,如果最后 Activity 也没有处理,本次事件将会被抛弃
    Activity <- PhoneWindow <- DecorView <- ViewGroup <- ... <- View
Read more »

Bitmap的加载

Posted on 2017-11-01

加载方式

  1. decodeFile 从文件系统加载

  2. decodeResource 从本地资源中加载

  3. decodeStream 从输入流加载

  4. decodeByteArray 从字节数组中加载

  5. decodeFile和decodeResource会间接调用decodeStream方法

占用的内存

计算公式:bitmapInRam = bitmapWidth*bitmapHeight*像素占用的内存
常用的参数有ARGB_4444、ARGB_8888、RGB_565
bitmapWidth和图片实际的尺寸有时并不相同,如果加载的是资源文件夹下的的图片则有可能会缩放。

Read more »

Activity的LaunchMode和Intent Flags详解

Posted on 2017-10-29

LaunchMode

standard

这是launchMode的默认值,Activity不包含android:launchMode或者显示设置为standard的Activity就会使用这种模式。一旦设置成这个值,每当有一次Intent请求,就会创建一个新的Activity实例

singleTop

singleTop其实和standard几乎一样,使用singleTop的Activity也可以创建很多个实例。唯一不同的就是,如果调用的目标Activity已经位于调用者的Task的栈顶,则不创建新实例,而是使用当前的这个Activity实例,并调用这个实例的onNewIntent方法。

Read more »
12<i class="fa fa-angle-right"></i>
John Doe

John Doe

17 posts
© 2020 John Doe
Powered by Hexo
Theme - NexT.Muse