
技术提升
文章平均质量分 85
小陈乱敲代码
这个作者很懒,什么都没留下…
展开
-
Android学习之zygote启动流程
在Android系统中,DVM(Dalvik虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。zygote的英文名为受精卵,由于他能不断孵化进程,因此也是名字的由来。它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝原创 2022-10-21 18:23:43 · 549 阅读 · 0 评论 -
详解Android View 中的事件分发机制
这三个方法在处理View的冲突时经常遇到,所以要熟悉其机制,看完这三个方法,现在来看看事件分发机制。从以上可以看出,这三个方法的联系。原创 2022-10-11 18:18:49 · 622 阅读 · 0 评论 -
Android之InstanceState详解
本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能、Android实现屏幕旋转异步下载效果这样两个示例。首先来介绍onSaveInstanceState() 和 onRestoreInstanceState()。原创 2022-10-10 18:19:38 · 209 阅读 · 0 评论 -
Context相关的内存泄露问题
TextView有activity的引用(Context),activity有很多东西的原因,使用静态内部类,并在它的内部创建一个对Activity的弱引用。原创 2022-10-10 18:03:09 · 864 阅读 · 0 评论 -
Handler消息机制关键类详解(二)
Handler,MessageQueue,Looper三者共同构成了android消息机制,各司其职。其中Handler主要负责发送和处理消息,MessageQueue主要负责消息的排序以及在没有需要处理的消息的时候阻塞代码,Looper负责从MessageQueue中取出消息给Handler处理,同时达到切换线程的目的。转载 2022-10-07 23:06:20 · 237 阅读 · 0 评论 -
Android 中的广播机制你了解多少?
Android 中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接受自己所关心的广播内容,Android 提供了一整套的 API,允许应用程序自由地发送和接受广播,今天我们就来详细介绍下转载 2022-10-06 22:34:30 · 843 阅读 · 0 评论 -
可跨页字符串:使用Spans设置文本样式
Spans 是用于在字符级别(例如,更改不同单词的颜色)或在段落级别(例如,制作项目符号列表)设置文本样式的标记对象。跨度字符串:当在创建文本或标记后无需修改文本或标记时,将使用此选项。跨线字符串:当不需要修改文本但需要修改标记(即需要向文本添加一些跨度)时,可以使用此功能。可跨接字符串构建器:当您需要修改文本和标记时,将使用此选项。这是关于安卓中跨度的快速介绍。现在,让我们看看它的一些用例。原创 2022-09-28 10:46:19 · 600 阅读 · 0 评论 -
Python 中的 Plotly 是什么?
Plotly Python 库是一个交互式开源绘图库,支持 40 多种独特的图表类型,涵盖广泛的统计、金融、地理、科学和 3 维用例。Plotly 的 Python 图形库制作交互式、出版质量的图形。如何制作折线图、散点图、面积图、条形图、误差线、箱线图、直方图、热图、子图、多轴图、极坐标图和气泡图的示例。Plotly.py是免费和开源的,您可以在 GitHub 上查看源代码、报告问题或贡献。原创 2022-09-26 16:07:47 · 1223 阅读 · 0 评论 -
给定两个正整数,在没有 + 运算符的情况下返回它们的和
从真值表中,您可以找到进位 = x & y和sum = x ^ y。但是,我们不能在 & 之后使用进位。为了处理进位结果,它应该向左移动 1 并与下一个输入位迭代相加。此迭代将继续进行,直到新进位为零。是的,这还不够,因为有 4 个案例的进位 = 0,另外 4 个案例的进位 = 1。示例输入 5 和 6 不会涵盖所有这 8 个案例。为了证明该算法,您需要至少涵盖所有 8 种情况。这个问题的实际意图是您是否可以使用逻辑门实现 Add 功能。给定两个正整数,在没有 + 运算符的情况下返回它们的和。原创 2022-09-23 17:24:00 · 130 阅读 · 0 评论 -
什么是 Termux,我们如何使用它?
因此,如果您对黑客技术感兴趣,那么这一定不是您第一次听说这个名为 termux 的应用程序。简而言之,termux 是一个 android 应用程序,它被定义为一个终端仿真器以及一个旨在在 android 上运行大多数 Linux 包的 Linux 环境。但是,由于 termux 应用程序不具备 Linux 的所有功能,因此用户必须将他的期望控制在一个限度内。但我建议尝试这个应用程序,因为它有一个相当不错的报价。该应用程序的用户界面缺少任何类型的图形工具,因此每次都需要编写所有命令,这当然很耗时。原创 2022-09-19 11:01:38 · 8936 阅读 · 0 评论 -
使用OkHttp拦截器和Retrofit进行缓存
在这篇博客中,我们将学习如何使用 OkHttp 拦截器和 Retrofit 在 Android 中缓存 HTTP 响应,以构建离线优先的 Android 应用程序。让我们了解缓存将如何在我们的 Android 应用程序中帮助我们。现在,让我们学习如何在 OkHttp 和 Retrofit 中启用缓存。在此之前,我们需要了解 Retrofit 使用 OkHttp 客户端进行 HTTP 操作,这意味着无论我们要启用缓存做什么,都需要使用 OkHttp。原创 2022-09-16 09:39:25 · 527 阅读 · 0 评论 -
Android:带有改造和单元测试的网络调用
Retrofit是Square开发的适用于Android、 Java和Kotlin的类型安全REST客户端。该库提供了一个强大的框架,用于验证和与API交互以及使用OkHttp发送网络请求。单元测试是一种软件测试,其中测试软件的单个单元或组件。目的是验证软件代码的每个单元是否按预期执行。单元测试由开发人员在应用程序的开发(编码阶段)期间完成。单元测试隔离一段代码并验证其正确性。一个单元可以是一个单独的函数、方法、过程、模块或对象。原创 2022-09-12 09:15:00 · 205 阅读 · 0 评论 -
AOSP 入门:设置构建环境、同步源代码和构建
Android (Android Open Source Project) 是一个开源的移动操作系统,它在底层运行 Linux 内核。它主要设计用于智能手机和平板电脑等触屏移动设备。作为一个开源操作系统,任何人都可以为任何设备构建它。今天我们将从设置我们的构建环境开始,同步 AOSP 源,然后构建 AOSP。...原创 2022-08-15 09:48:20 · 1883 阅读 · 0 评论 -
【Android Flutter】搭建环境 + Demo
Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼、腾讯的微信等。今天,我将献上一份《全面 & 详细的Flutter入门开发攻略》,旨在让你快速上手Flutter开发,包括环境搭建、关键语法和示例讲解,希望你们会喜欢。本文主要分文两大部分:环境搭建 & 示例讲解此处搭建主要是基于Mac OS。2. 下载Flutter SDK下载地址:官网链接命令行输入以下文件4. 安装Flutter插件(Flutter Plugin)原创 2022-07-04 11:53:58 · 1118 阅读 · 0 评论 -
Appium安卓自动化元素定位怎么做
无论想在 app 页面中进行怎样的操作,我们先得找到那个要操作的元素。比如你想直接点击一个按钮,那么你就必须要先找到这个按钮。如果你想在输入框当中去输入一些内容,那么你就必须要先找到这个输入框。这个寻找需要操作的元素的过程,叫做元素定位。在大多数的APP操作过程当中,首先必须先找到需要操作的元素,这个过程就叫元素定位。在Appium当中进行元素定位的函数叫 find_element,他传递两个参数。第1个参数是定位元素的方式, 第二个参数是这个方式的值。 举个例子,通过 ID 定位一个元素,第1个参数就填原创 2022-06-17 16:06:50 · 764 阅读 · 0 评论 -
Android仿同花顺自选股列表控件
RecyclerView的开发中,我们通常会遇到一行显示不下内容的情况,产品会要求我们的item是可以滚动的,并且头部是固定的。特别在股票行情类相关的app上,这样的场景是非常多的,所以封装了如下的自定义组件。首先上效果图,可以看到可以横向滚动,头部固定不动,并且支持侧滑拖出彩蛋“hello”,这里的实现效果是模仿的同花顺的自选股池 || — | — |最外层使用RecyclerView,item使用LinearLayout布局,左边是一个固定的头部,我这里使用的是TextView,右边是一个自定义的S原创 2022-06-14 21:29:55 · 1285 阅读 · 4 评论 -
Android 协程使用指南
协程是我们在 上进行异步编程的推荐解决方案之一,通过挂起和恢复让状态机状态流转实现把层层嵌套的回调代码变成像同步代码那样直观、简洁,协程的出现很好的避免了回调地狱的出现。所谓挂起,是指挂起协程,而非挂起线程,并且这个操作对线程是非阻塞式的。当线程执行到协程的 函数的时候,对于线程而言,线程会被回收或者再利用执行其他工作,就像主线程其实是会继续 刷新工作。而对于协程本身,会根据 传入的 所指定的线程去执行任务。关于恢复,当挂起函数执行完毕后,会自动根据 切回原来的线程往下执行。其中 主要是对写原创 2022-06-08 21:39:03 · 2366 阅读 · 0 评论 -
Android 无障碍服务 performAction 的调用过程分析
无障碍服务可以模拟一些用户操作,无障碍可以处理的对象,通过类 AccessibilityNodeInfo 表示,通过无障碍服务,可以通过它的 方法来触发一些 action ,包括:他们都可以通过 方法进行处理:在这个方法中,第一步是检查 perform 是否可以通过 connection 请求,这里 connection 检查是根据通过 binder 通信传递过来的 id 检查连接是否正常。 然后通过 对象,调用它的 方法去进行实际操作的。这个类是一个执行可访问性交互的单例,它可以根据 View原创 2022-06-06 21:26:04 · 2645 阅读 · 1 评论 -
android 如何获全屏幕view内容
深入看下底层的原理:ActivityThread中执行handleResumeActivity方法并在里面执行了activity的onResume方法,这片段的源码如下:在执行activity的onResume方法后,创建了ViewManager,然后拿到LayoutParams,最后通过addView方法把DecorView和LayoutParams加入ViewManager.ViewManager其实就是一个WindowManagerImpl对象.跟进代码里面可以看到,WindowManagerImp原创 2022-06-01 21:56:10 · 1850 阅读 · 0 评论 -
Android Freezer 简介
1 概述Android从诞生之初就有一个难题: 怎么最大限度的优化进程对有限的系统物理资源的使用,比如CPU、电量、内存等,同时保证良好的用户体验。很多进程在停止和用户交互之后,会长期停留在后台,此时它们对于用户体验没有任何贡献。Android之所以没有立刻杀掉这些进程,是出于用户恢复使用这些进程时,启动速度的考虑。但是这些进程在后台却可以持续占据使用CPU,有些会在后台持续消耗内存。怎么在不杀掉这些进程的基础之上,最大限度的限制这些进程?Freezer 挺身而出,通过“冰冻”的方式解决问题。1原创 2022-05-30 21:15:06 · 4295 阅读 · 0 评论 -
Android 10 App启动分析之Activity启动篇(二)
上一篇:Android 10 App启动分析之进程创建篇(一)上一篇文章,我们探讨了App启动过程中进程创建及初始化的流程,这篇文章我们接着上篇的内容,继续探讨App的Application和Activity的创建及启动流程。让我们把目光聚焦到ActivityThread的main方法上。ActivityThread的源码路径为 /frameworks/base/core/java/android/app/ActivityThread。public static void main(String原创 2022-05-27 17:02:26 · 451 阅读 · 0 评论 -
Android 10 App启动分析之进程创建篇(一)
系统在完成所有的初始化工作后,会通过mAtmInternal.startHomeOnAllDisplays(currentUserId, "systemReady");这条语句,来启动android系统的第一个App,即Launcher应用。这篇文章,我们便以Launcher为引子来探讨一下App的启动流程,在启动App时,系统究竟做了哪些操作?在AMS调用startHomeOnAllDisplays方法后,经过层层追溯,我们最终将目光定位到RootActivityContainer中的startHo原创 2022-05-26 16:34:29 · 1041 阅读 · 0 评论 -
Activity Result API 动态申请Android权限
Activity Result通常我们启动另一个Activity并不是单向操作的,我们往往会启动另外一个Activity以获取结果。如打开相机拍照获取照片。而在之中,Activity Results API 是 Google官方推荐的Activity、Fragment获取返回结果的方式。相当于原startActivityForResult 和 onActivityResult方法。Activity Result API 是Androidx 提供用于注册结果、启动结果以及在系统分派结果后对其进行处理的组件。原创 2022-05-24 16:48:29 · 630 阅读 · 0 评论 -
【Jetpack Compose】LazyColumn 使用Paging3分页+SwipeRefresh下拉刷新
1.数据源这里采用GitHub REST API的搜索的api来作为数据源:https://api.github.com/search/repositories?q=compose+language:kotlin&sort=stars&order=desc 大家可以用AS的JsonToKotlinClass插件来把这个响应数据生成data class,这里就不贴代码了。2.依赖项//network & serializationimplementation "com.原创 2022-05-20 17:10:18 · 2990 阅读 · 0 评论 -
[Flutter插件开发] 网络状态监听组件
前言本文讲述如何开发一个Flutter插件,用于监听手机网络状态的改变。需要注意的是,此插件目前只支持安卓平台。使用每当网络状态改变时,NetworkListener的builder方法都会被调用,通过status回调网络状态。NetworkListener( builder: (_,status){ var networkStatuds = ""; if (status == ConnectivityResult.none) { networkStatuds = "原创 2022-05-18 16:39:49 · 895 阅读 · 0 评论 -
逐行分析AQS源码(4)——Condition接口实现
概述我们在前面介绍Conditon的时候说过,Condition接口的await/signal机制是设计用来代替监视器锁的wait/notify机制的,因此,与监视器锁的wait/notify机制对照着学习有助于我们更好的理解Conditon接口:Object 方法Condition 方法区别void wait()void await()void wait(long timeout)long awaitNanos(long nanosTimeout)时间单位,返回值原创 2022-05-12 22:08:16 · 243 阅读 · 0 评论