Android开发一枚,偶尔搞点别的,哈哈!公众号:AntDream
Android开发中,View的三大核心流程包括measure(测量)、layout(布局)和draw(绘制)。MeasureSpec类在测量过程中起到关键作用,它结合尺寸大小和模式(EXACTLY、AT_MOST、UNSPECIFIED)来指定View应如何测量。onMeasure方法用于自定义View的测量,布局阶段,ViewGroup调用onLayout确定子元素位置,而draw阶段按照特定顺序绘制背景、内容、子元素和装饰。整个流程始于ViewRootImpl的performTraversals,该方法触发测量、布局和绘制。
Glide通过生命周期管理在`onStop`时暂停请求,`onDestroy`时取消请求,减少资源浪费。在`EngineJob`和`DecodeJob`中使用`cancel`方法标记任务并中断数据获取。当网络请求被取消时,`HttpUrlFetcher`的`cancel`方法设置标志,之后的数据获取会返回`null`,中断加载流程。Glide还使用定制的线程池,如AnimationExecutor、diskCacheExecutor、sourceExecutor和newUnlimitedSourceExecutor,其中某些禁止网络访问,并根据CPU核心数动态调整线程数。
嫦娥六号成功返回,首次实现月球背面采样,标志中国航天新成就;嫦娥七号计划2026年前后发射,目标月球南极,寻找水冰证据,多国科学载荷参与,展现国际合作;嫦娥八号将助力月球科研站建设,中国载人登月计划预计2030年前实现。🚀🌙✨
Glide缓存机制包括内存和硬盘缓存。内存缓存使用弱引用的ActiveResources和LRU策略,硬盘缓存利用DiskLruCache。Engine.load方法首先尝试从内存和弱引用池加载,然后从LRU缓存中加载图片,增加引用计数并移出LRU。若缓存未命中,启动新任务或加入现有任务。内存大小根据设备内存动态计算,限制在0.4以下。DiskLruCache使用自定义读写锁,保证并发安全,写操作通过锁池管理,确保高效。
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
本文探讨了Android应用的卡顿优化,重点在于布局优化。建议包括将耗时操作移到后台、使用ViewPager2实现懒加载、减少布局嵌套并利用merge标签、使用ViewStub减少资源消耗,以及通过Layout Inspector和GPU过度绘制检测来优化。推荐使用AsyncLayoutInflater异步加载布局,但需注意线程安全和不支持特性。卡顿监控方面,提到了通过Looper、ChoreographerHelper、adb命令及第三方工具如systrace和BlockCanary。总结了Choreographer基于掉帧计算和BlockCanary基于Looper监控的原理。
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
【斯坦福HAI发布2024年AI指数报告】揭示AI发展10大趋势:AI在特定领域超人但复杂任务仍有挑战;产业界主导AI创新,推出大量模型;训练成本飙升,如GPT-4训练耗资近8千万美元;美国领先,中国持续突破;大模型责任评估缺失;生成式AI投资增长;AI提升工作效率,缩小技能差距;加速科学进步;法规增多;全球对AI既期待又担忧。关注公众号AntDream获取更多详情!
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`<data>`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
本文探讨了协程与线程的区别,指出协程并非线程,而是轻量级的线程替代。协程轻量体现在它们共享调用栈,内存占用少,仅需几个KB。协程切换发生在用户态,避免了昂贵的内核态切换。在Kotlin中,协程通过Continuation对象实现上下文保存,允许高效并发执行,而不会像线程那样消耗大量资源。通过`runBlocking`和`launch`示例展示了协程的非阻塞挂起特性。总结来说,协程的轻量主要源于内存占用少、切换开销低和高并发能力。
本文探讨了在信息技术快速发展的背景下,开发者如何选择学习路径。作者提倡使用终局思维来规划职业发展,考虑技术的长远影响。终局思维注重长远目标、系统分析、反向规划和动态调整。以车载开发为例,预测未来智能汽车可能由语音助手主导,而非依赖平板界面。此外,作者建议不要过分投入打工状态,应思考创建自己的产品,如App,以实现技能补充和额外收入。选择对未来发展和自主性有益的技术,如Kotlin,比盲目追求热点更为重要。做减法和有标准的选择,能帮助减轻焦虑,实现更高效的成长。关注公众号“AntDream”获取更多相关内容。
了解Kotlin协程的挂起、执行和恢复机制。挂起时,状态和上下文(局部变量、调用栈、调度器等)被保存;挂起点通过`Continuation`对象处理,释放线程控制权。当恢复条件满足,调度器重新分配线程,调用`resumeWith`恢复执行。关注公众号“AntDream”获取更多并发知识。
Windows安装Anaconda 安装过程比较简单,就是去官网下载对应的exe版本安装就好。注意点: 如果官网比较慢,推荐用清华源: https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ 安装过程中不需要点 add to path那个选择,后续手动添加环境变量即可 如无必要,就选择安装给当前用户就行,不要选安装给全部用户 安装以后碰到的问题 找不到Anaconda-Navigator Anaconda最常用的方式就是用Anaconda-Navigator打开,是一个GUI页面。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 文件和目录操作是很常见的功能,这里做个简单的总结,包括注意事项和实际的实现代码,基本日常开发都够用了 目录操作 判断目录或是文件是否存在 os.
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 首先是安装和配置环境 安装和配置Python有2种方式: 一种是通过安装Anaconda, Anaconda类似一个包管理工具,里面集合了关于Python的很多信息,包括三方库、网站博客等。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 为什么已经推到远程的分支,我本地checkout的时候还是提示找不到分支? 首先我们要弄清楚的是,checkout 是本地命令,不跟远程仓库打交道。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 提交分3步:add、commit、push,回滚和撤销也分3种情况: 撤销add 撤销commit 回滚push,也就是回滚远程仓库的代码 撤销add 这种情况有可能是在 git add 操作的时候一些不必要的文件也加进来了,所以想撤销,重新 add 。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 提交对象 一般我们平时有了需要提交的文件,都是2步走:add,然后commit add操作 第一步:添加文件 //添加文件到暂存区 git add test.
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 树对象(tree)—— 保存文件名和目录关系 树对象主要解决2个问题,:文件名的保存和文件目录关系的保存 就像下面这样 下面我们就来模拟一下构建上面这颗树,也就是模拟保存这3个文件,其中的"bak"是一个目录,下面有一个文件 首先可以看到,我们一共需要保存的是3个文件,new.txt 、 内容为version 2的 test.txt 和内容为version 1的 test.txt。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Git本地仓库 每一个Git项目下都会有一个.git目录,里面包含了整个git仓库的信息数据。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 我们在使用Git的时候一般有3个工作区的概念:Git 仓库、工作目录以及暂存区域。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 替换字体也是一个比较常见的需求,一般分几种情况。实现起来也不麻烦,这里简单记录下 全局替换字体 步骤1 assets目录下拷贝字体文件 步骤2 application中替换默认字...
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 反转 反转最简单的就是用StringBuilder和StringBuffer的reverse方法 private String reverseString(String orig.
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 前言 很多APP都需要支付功能,国内一般就是支付宝和微信了。目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 问题出现的步骤 首先通过SourceTree新建一个新的分支,新建分支的时候是基于远程分支的某次提交 然后将新建的分支推送到远程 最后在本地git目录文件夹中,通过...
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Android 7.0相机拍照适配 (1)首先必须获取拍照的权限 简单一点的可以直接用ActivityCompat的requestPermissions方法 ActivityCompat.
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 用Redis配置缓存服务 安装Redis 先到你的目录,比如redis,下载并解压redis包 wget http://download.redis.io/releases/redis-4.0.11.tar.gz tar xzf redis-4.0.11.tar.gz 然后进入redis-4.0.11目录编译redis cd redis-4.0.11 //编译 make 然后将redis安装到某个目录。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 安装好owncloud后,我们就有了自己的云盘。但是我们的云盘性能安全性怎么样呢?还有哪些问题呢? 我们可以进如owncloud的设置页面看看 设置中的警告 我们可以看到在安全与设置警告里还有好几个问题。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 日常开发过程中难免要进行抓包,查看服务端返回的数据是否正常,而Charles可谓是抓包利器了。
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 owncloud是一个开源的云盘解决方案,我们可以用owncloud快速地搭建起我们自己私有的云盘,这样文件地安全性和云盘地可靠性都有保证,对于公司和个人都是非常有用的。
ArrayBlockingQueue是常见的阻塞队列之一 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable { private stat.
Android多进程系列 Android 多进程通信之几个基本问题 Android多进程之Binder的使用 Android多进程之手动编写Binder类 接上一篇文章《Android多进程之手动编写Binder类》中向服务端注册监听事件的问题,在扩展了Binder类后,我们还需要改造对应的服务端.
开启多进程的方法 Android 中使用多进程只有一种方法,那就是给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidMenifest中指定android:process属性 <service android:name="com.