Android

Android Choreographer源码详细分析

2022-08-25
目录 一.首先介绍一些基础知识 二.android源码中Choreographer是如何运行 一.首先介绍一些基础知识 1.刷新率(Refresh Rate): 刷新率代表屏幕在一秒内刷新屏幕的次数,用赫兹来表示.赫兹是频率的单位,一秒震动的次数.这个刷新率取决于硬件固定的参数.这个值一般是60Hz.即每16.66ms刷新一次屏幕. 2.帧速率(Frame Rate): 帧速率代表了GPU在一秒内绘制操作的帧数.比如30FPS.60FPS.Frame Per Second. 3.如果两个设备独立

Kotlin线程的桥接与切换使用介绍

2022-08-24
目录 一.线程的桥接 1.runBlocking方法 2.BlockingCoroutine类 二.线程的切换 1.withContext方法 2.startUndispatchedOrReturn方法 3.ScopeCoroutine类 4.UndispatchedCoroutine类 5.DispatchedCoroutine类 6.总结 一.线程的桥接 1.runBlocking方法 runBlocking方法用于在线程中去执行suspend方法,代码如下: @Throws(Interru

Android MPAndroidChart绘制原理

2022-08-24
目录 前言 1. Chart整体结构 2.Chart 绘制参与的业务组件 Render Buffer Entry.DataSet Attribute 3. 整体Chart绘制流程 前言 官方demo地址:github.com/PhilJay/MPA… 笔者接下来的文章里MPChart 代表的就是 MPAndroidChart. 下载后AS里运行,可以看到demo里面有 Line Charts, Bar Charts, Pie Charts, Radar Charts, Other Charts.

Android Flutter实现自定义下拉刷新组件

2022-08-24
目录 前言 改造点 DIY下拉组件样式 刷新时机调整 效果展示 前言 在Flutter开发中官方提供了多平台的下拉刷新组件供开发者使用,例如RefreshIndicator和CupertinoSliverRefreshControl分别适配Android和iOS下拉刷新交互形态.但实际情况中这两者使用情况却不太相同在使用场景就存在差异,RefreshIndicator作为嵌套型下拉组件列表内容作为它的child使用而CupertinoSliverRefreshControl是嵌入在Sliver列

Kotlin浅析null操作方法

2022-08-23
1.在java中由于null引起的空指针异常,是一个运行时异常. 在kotlin中为了避免这样的问题,会在编译期提示出来,而不是在运行期才报错. 1)比如我们把null赋值给一个已经被赋值的变量或者定义一个返回null的函数,编译器就会报错提示:Null can not be a value of a non-null type String var hello = "hello world" hello = null fun getString(): String{ return n

Android开发之Gradle 进阶Tasks深入了解

2022-08-23
目录 前言 定义Task register与create的区别 查找Task 配置Task 将参数传递给Task构造函数 Task添加依赖 Task排序 Task添加说明 跳过Task 使用onlyIf 使用 StopExecutionException 禁用与启用Task Task超时 Task支持增量编译 Task的输入输出 自定义task类型 声明输入输出的好处 推断task依赖关系 输入和输出验证 并行task 增量编译原理解析 一些高端操作 将@OutputDirectory链接到@I

Android开发使用RecyclerView添加点击事件实例详解

2022-08-23
目录 引言 一.RecyclerView基本使用 1. 添加适配器Adapter 2. 创建列表的每个项的item_layout.xml文件 3. 在activity中使用 二.RecyclerView点击事件详细步骤 1. 在RecyclerView对应的Adapter类里面新建接口 2. 在Adapter类里创建setOnItemClickListener方法 3. 在Adapter类的onBindViewHolder里给每个item设置回调 4. 在RecyclerView对应的Activ

GridView实现桌面图标显示案例

2022-08-23
GridView实现桌面图标显示案例,供大家参考,具体内容如下 用法与ListView类似,需要以下几步: 1.定义实体类2.自定义适配器继承BaseAdapter3.定义GridView内部布局 效果图: 代码: 实体类:Icon.java package com.example.a16gridviewtest.entity; public class Icon {     private int iconId;     private String name;     public Icon

Android webview加载H5方法详细介绍

2022-08-23
目录 1,安卓APP 怎么用webview加载H5 2,H5怎么调用安卓定义的方法 3,安卓怎么调用H5定义的方法 这篇文章主要阐述3个知识点 安卓APP 怎么用webview加载H5 H5怎么调用安卓定义的方法 安卓怎么调用H5定义的方法 1,安卓APP 怎么用webview加载H5 安卓端定义个webview xml 页面,代码如下所示: <?xml version="1.0" encoding="utf-8"?> <WebView xmlns

Android使用ViewStub实现布局优化方法示例

2022-08-23
目录 实践过程 实现方式 知识点 实践过程 Hello,大家好啊,我是小空,今天带大家了解下动态加载控件ViewStub. 在平时开发中经常会遇到复杂布局,而每一个view都是会占据内存和消耗cpu的(即使再小,累计成多,一般嵌套7级以上就有明显的卡顿了),布局优化就是我们常做的任务之一,甚至是一块心病.所以我们工作中就要留意布局优化的手段,ViewStub就是其中之一. 大家应该听过merge标签,将某个布局文件的根布局写成merge的,然后对应的布局include引用,会默认不会引入merg

初识Android PowerManagerService省电模式

2022-08-23
目录 前言 功能介绍 环境 结束 前言 最近遇到一些关于省电模式.电量消耗.Doze模式,等等相关问题.于是,我决定对它们进行彻底分析,那就先从省电模式开启. 功能介绍 可以在 Settings->Battery->Battery Saver 界面进行省电模式的操作,如下图: 界面中有三个开关,它们的意思如下: Use Battery Saver : 打开/关闭省电模式. Set a Schedule : 设置一个电量百分比阈值,当电量低于这个阈值的时候,就会触发省电模式.设置阈值的界面如下图

Flutter StreamBuilder实现局部刷新实例详解

2022-08-23
目录 前言 StreamBuilder 简介 StreamBuilder的实际应用 总结 前言 在flutter项目中,页面内直接调用setState方法会使得页面重新执行build方法,导致内部组件被全量刷新,造成不必要的性能消耗.出于性能和用户体验方面的考虑我们经常会使用局部刷新代替全量刷新进行页面更新的操作. 包括Provider.ValueNotifier和StatefulBuilder等在内的技术方案,都能够帮助我们实现Flutter局部刷新的需求.有兴趣了解StatefulBuild

ExpandListView实现下拉列表案例

2022-08-23
ExpandListView实现下拉列表案例,供大家参考,具体内容如下 使用方式与ListView类似,是ListView的一个延申,Group为TextView,子元素为ListView. 效果图: 代码: 实体类: Group.java public class Group {     private String gName;     public Group() {     }     public Group(String gName) {         this.gName = g

Android开发flow常见API的使用示例详解

2022-08-23
目录 collect通知flow执行 launchIn()指定协程作用域通知flow执行 catch{}捕捉异常 merge()合流 map{}变换发送的数据类型 总结 collect通知flow执行 public suspend inline fun <T> Flow<T>.collect(crossinline action: suspend (value: T) -> Unit): Unit = collect(object : FlowCollector<T&g

flutter material widget组件之信息展示组件使用详解

2022-08-23
flutter material widget组件之信息展示组件,供大家参考,具体内容如下 widget分为两类:widgets library中的标准widget和Material Components library中的专用widget;任何应用程序都可以使用widgets library中的widget,但只有Material应用程序可以使用Material Components库.其中Card,ListTitle就是Material Components库中的组件. Image Icon

Android Dispatchers.IO线程池深入刨析

2022-08-23
目录 一. Dispatchers.IO 1.Dispatchers.IO 2.DefaultScheduler类 3.LimitingDispatcher类 4.ExperimentalCoroutineDispatcher类 二.CoroutineScheduler类 1.CoroutineScheduler类的继承关系 2.CoroutineScheduler类的全局变量 三.Worker类与WorkerState类 1.WorkerState类 2.Worker类的继承关系与全局变量 3

使用Compose制作抖音快手视频进度条Loading动画效果

2022-08-23
目录 引言 Loading效果 BoxWithConstraints代码 animateFloat获取动画更新值 线条动画值 执行渐隐 最终效果 引言 现在互联网产品,感觉谁家的App不整点视频功能,严格意义上都不能说是一个现代互联网App了,我们知道最火的是抖音.快手这类短视频App,在刷视频的同时,他们的App交互上面的一些特色能让我们一直沉浸在刷视频中: 比如,我们今天要聊的,短视频翻页流列表,视频加载缓冲的时候,Loading的设计: 它设计:在视频底部,进度条上面,当视频缓冲加载等待的

一文详解 Compose Navigation 的实现原理

2022-08-22
目录 前言 1. 从 Jetpack Navigation 说起 2. 定义导航 3. 导航跳转 4. 保存状态 SaveableStateHolder & rememberSaveable 导航回退时的状态保存 底部导航栏切换时的状态保存 5. 导航转场动画 6. Hilt & Navigation 7. 总结 前言 一个纯 Compose 项目少不了页面导航的支持,而 navigation-compose 几乎是这方面的唯一选择,这也使得它成为 Compose 工程的标配二方库.介绍 

Android协程作用域与序列发生器限制介绍梳理

2022-08-22
目录 一.受限协程作用域 1.sequence方法 2.SequenceScope类 二.序列发生器 1.Sequence接口 2.Sequence方法 3.iterator方法 4.SequenceBuilderIterator类 1.SequenceBuilderIterator类的全局变量 2.yield方法与yieldAll方法 3.hasNext方法 4.next方法 5.总结 一.受限协程作用域 在协程的基础与使用中提到,可以通过sequence方法构建一个序列发生器.但当在sequ

Flutter实现下拉刷新和上拉加载更多

2022-08-22
本文实例为大家分享了Flutter实现下拉刷新和上拉加载更多的具体代码,供大家参考,具体内容如下 效果 下拉刷新 如果实现下拉刷新,必须借助RefreshIndicator,在listview外面包裹一层RefreshIndicator,然后在RefreshIndicator里面实现onRefresh方法. body: movieList.length == 0           ? new Center(child: new CircularProgressIndicator())