- 博客(49)
- 收藏
- 关注
原创 展开说说:Android页面绘制流程源码解析
说到Android系统View的绘制流程,大家一定知道是分为测量(Measure)、布局(Layout)和绘制(Draw)三个阶段,这篇文章主要聊一聊在这三个步骤之前的源码执行流程,页面启动后是怎样通过代码执行这三个方法。
2024-07-14 23:08:27 997
原创 展开说说:Android之View基础知识解析
View虽不属于Android四代组件,但应用程度却非常非常广泛。在Android客户端,君所见之处皆是View。我们看到的Button、ImageView、TextView等等可视化的控件都是View,ViewGroup是View的子类因此它也是View。但是现在我们把View和ViewGroup当成两个类来看待,ViewGroup可以容纳View和ViewGroup,但View不可以再容纳其他View或ViewGroup,这种容纳的关系可以一直延伸仿佛一棵大树,从内而外有了父子关系,因此有个概念叫做Vi
2024-07-13 23:11:02 1313
原创 展开说说:Android服务之实现AIDL跨应用通信
AIDL技术跨进程通信可以理解为是服务端和客户端之间的通信(IPC),定义Service的进程称为服务端,调用服务的进程就是客户端。
2024-07-09 22:37:47 937
原创 展开说说:Android服务之bindService解析
前面两篇文章我们分别总结了Android四种Service的基本使用以及源码层面总结一下startService的执行过程,本篇继续从源码层面总结bindService的执行过程。本文依然按着是什么?有什么?怎么用?啥原理?的步骤来分析。bindService使用方法和调用流程都与startService时有很多相似之处,方便的话请先阅读上一篇《展开说说:Android服务之startService解析》。
2024-07-08 22:03:08 1590
原创 展开说说:Android服务之startService源码解析
通过上一篇文章我们掌握了Android四种的基本使用,本篇从源码层面总结一下startService的执行过程。本文依然按着是什么?有什么?怎么用?啥原理?的步骤来分析。
2024-07-06 17:05:20 1018
原创 展开说说:Android四大组件之Service使用
Service一定要开启子线程才可以执行耗时任务吗?不完全是吧。Service是Android系统中的四大组件之一,它是一种没有可视化界面,运行于后台的一种服务程序。属于计算型组件,用来在后台执行持续性的计算任务,重要性仅次于Activity活动。
2024-07-04 22:07:02 626 1
原创 谁说Android子线程一定不能更新UI
谁说的Android子线程一定不能更新UI,不用handler、View的post和Activity的runOnUiThread特定情况下一样可以再子线程更新UI。天下武功,唯快不破。先说一下结论,在Activity的onCreate方法执行入口创建子线程然后内部更新UI是可以正常更新的,不会抛异常发生闪退。但是,如果晚一会就不行了,前面加个1秒延时就会闪退。
2024-06-30 23:28:41 1078
原创 Android常用加解密算法总结
Android开发中对于数据的传输和保存一定会使用加密技术,加密算法是最普遍的安保手段,多数情况数据加密后在需要使用源数据时需要再进行解密,但凡是都有例外。下面从可逆加密、不可逆、不纯粹加密三种方式记录一下常见的加解密算法。加密技术包括两个元素:算法和密钥:算法使用密钥将明文数据变成无法辨识的密文。以下代码是点击事件里调用SecurityUtil工具类,加解密算法都再SecurityUtil中实现。
2024-06-30 20:03:28 948
原创 展开说说:Android列表之RecyclerView
RecyclerView 内置ViewHolder,省去了每次findViewById() 创建视图;当列表滑动的时候,只有少量相邻的视图会被创建。当视图滑出屏幕时,RecyclerView 会复用它并且填充新的数据。由于它是通过回收已有的结构而不是持续创建新的列表项,所以它可以有效提高应用的时间效率和空间效率。
2024-06-27 22:39:01 977
原创 展开说说:Android之WebView详解
onPageStarted是在onProgressChanged执行之后才会执行;onPageFinished是在onProgressChanged加载到100之后才执行;onReceivedError如果执行一定是在onPageFinished之后还需要注意Android原生调用js需要在onPageFinished回调之后再调用否则不生效,因为B页面还没加载完你喊破嗓子它也不理你.
2024-05-08 23:30:57 1546
原创 展开说说:Android线程池解析
何谓线程池?本人理解是存放和管理线程的一个容器。线程池存在的意义是什么?第一:前面博客提到过创建和销毁线程的操作本身是有性能开销的,如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本,使用越频繁就越能节省性能,毕竟省到就是赚到嘛。第二:方便的管理线程,避免很多线程同时争抢资源引发阻塞。毕竟是人家封装过的,因此有专门的属性参数来控制核心线程数、最大并发数、非核心线程的最大限制时长等。
2024-05-07 22:47:19 933
原创 展开说说:Android实现多线程解析
通过日志可以看出AsyncTask执行异步任务的逻辑是先执行onPreExecute方法让我们做一些准备工作,然后doInBackground方法被回调做耗时任务,需要主动调用publishProgress方法,然后onProgressUpdate被回调,doInBackground中伪造了十秒延时后再次主动调用publishProgress方法onProgressUpdate再次被回调,最后任务执行结束以后onPostExecute被回调返回执行结果。
2024-05-05 22:33:06 923
原创 展开说说:Android实现多线程几种方式
Thread类的start()方法和run()方法的主要区别在于人家扮演的角色压根就不一样。以下是两者的主要区别:首先达到的效果不同。run()方法是线程中实际运行的代码,他就是仅代表调用run方法而已;start()方法是启动一个新线程,它会创建一个新的线程并在新的线程中并行执行run方法的任务。因此在实际的多线程编程中,应该通过调用start()方法来启动线程。
2024-05-04 12:54:56 1123 1
原创 展开说说:Android Fragment完全解析-卷三
本文章分析了Fragment的管理器FragmentManager、事务以及完整的声明周期和动态加载Fragment的原理解析。
2024-05-03 13:32:04 1190 2
原创 展开说说:Android动画之自定义动画
本篇记录一个小球沿着正弦曲线运动并且自身不断放大缩小还能变换自身颜色的属性动画。1、梳理一下实现上面效果的需要用到那些知识点:1.1这个动画的主角是“一个小球”因此我们需要使用canvas绘制一个小球,为了突出它是是沿正弦曲线运动我们在屏幕上加一条横线,同样使用canvas绘制1.2 正弦曲线就需要ValueAnimator使用自定义一个估值器继承TypeEvaluator,计算小球的运动轨迹1.3 小球放大缩小也需要一个ValueAnimator计算小球的半径1.4 变换小球自身颜色,
2024-05-01 18:44:36 914
原创 展开说说:Android动画之插值器和估值器
上一篇写了Android三种动画的使用,这里分析一下属性动画的两个属性插值器和估值器。1.1 描述TimeInterpolator、Interpolator、BaseInterpolator以及一些其他的XXInterpolator,一眼望去您认为谁是插值器的顶级父类,3、2、1,没错是TimeInterpolator,因此严格意义上来说他好像应该叫时间插值器。其实我的第一错觉Interpolator才是,下图可以看出来我真的错了。
2024-04-25 23:30:39 1021 2
原创 展开说说:Android动画使用
属性动画Animator是个抽象类,有三个子类ValueAnimator、AnimatorSet,而TimeAnimator和ObjectAnimator是ValueAnimator的子类、我们都是在使用他们四个实现动画。补间分为平移动画translate、缩放动画scale、旋转动画rotate、透明度动画alpha以及动画合集set,用发基本类似此处以缩放动画为例。补间动画也可以在java代码中实现,这里其实完成了上面的第一步和第二部,有了animation对象其他的都一样了。实例去执行或者关闭动画。
2024-04-25 07:13:51 1161 3
原创 展开说说:Android Fragment完全解析-卷二
3.1 ViewPager为什么可以滑动?因为ViewPager重写了View类的computeScroll方法,并在computeScroll中调用onPageScrolled并且里还调用了view的scrollTo实现view滑动,重写view中的这个方法,computeScroll和scrollTo配合专门负责实现滑动的
2024-04-21 22:31:49 954 1
原创 展开说说:Android Fragment完全解析-卷一
Fragment 它很独立,它可以定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。Fragment 很粘人,它不能独立存在。它们必须由 activity 或其他 fragment 托管(即fragment可以内嵌fragment使用)。同一 activity 或多个 activity 中可以使用同一 fragment 类的多个实例,但是要注意解耦避免让一个 fragment 依赖另一个 fragment 或在一个 fragment 操控另一个 fragment。
2024-04-20 19:28:03 832
原创 Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project
找到settings.gradle文件检查是否有include ':app'。如果没有要加上;如果已经有了就先把它注释了然后点Syno Now,此时它开始编译了不会无动于衷袖手旁观了。最后把include ':app'这一行放开再点Syno Now问题解决。
2024-04-16 22:26:15 1239
原创 Android-Handler详解_原理解析
5.1 handler的sendMessge相关的一些方法用来发消息,post方法其实最后也会调到send方法,然后通过enqueueMessage方法调用MessageQueue的enqueueMessage方法存储消息。5.2 handler的handleMessage方法或者Handler.CallBack的handleMessage方法,以及post方法的run回调方法。5.3 消息队列MessageQueue提供了enqueueMessage和next两个方法分别用来
2024-03-27 23:47:55 1514
原创 Android-Handler详解_使用篇
我理解的Handler消息机制:以寄快递为例,我是Handler、快递员是Looper、商品仓库是MessageQueue、Messge是我下单消息寄出的物品。放假我Handler把电脑从公司寄回老家,我填写老家的地址就是声明handleMessage方法、我下单就是sendMessage我把电脑送到快递公司仓库MesssageQueue、然后经过快递公司内部流转,我老家的快递员Looper从仓库MessageQueue取出商品,根据地址送到我老家handleMessage方法。
2024-03-27 23:39:24 1317
原创 展开说说:Android之SharedPreferences
是个接口它的内部接口是Editor,里面定义了上面五个数据类型的put方法,以及putString、remove、clear、commit、apply方法。父级接口定义的,因此增加、删除、清空方法需要使用edit但get方法不用,下面距离分别验证这些方法。在实际开发者很多会涉及敏感数据,针对敏感数据我们呢需要对其加密后再进行存储,取数据也是先解密再使用。如果需要存取比较复杂的数据类型,则需要对这些数据进行。上面可以看出getxx方法不在Edit接口中,他们是在。中引入的,调用它会安全的异步写入。
2024-03-16 23:54:00 1291
原创 HarmonyOS-鸿蒙系统概述
华为“1+8+N” 全场景智慧战略,其中居于核心的“1”是智能手机,“8”是指围绕手机的车机、音箱、耳机、手表/手环、平板、大屏、PC、AR/VR产品,N则指众多泛IoT设备。
2024-03-16 16:35:59 2711 1
原创 HarmonyOS-页面跳转Router实例演示
本文将以APP的登录和修改昵称为例演示官网的几种页面跳转、返回以及这些流程携带参数,实例的形式记录学习HarmonyOS的页面跳转。
2024-03-12 23:31:38 1930
原创 JAVA泛型浅析
Java范型generics,是JDK1.5引入的新特性,是一种编译时类型安全检测机制,可以在编译时检测到非法的类型。定义泛型参数时还可以使用继承,例如 ,后面都可以使用User类或它的子类接收在必要的时再强转指定类型。在方法调用时检测类型,在返回值类型之前的是范型方法的象征,此处表示声明了一个范型T,范型数量也可以多个比如;当实现范型接口的类不传范型实参:比如下面的也需要在类名增加GenericInterUser1和接口一样的范型。
2024-02-28 23:28:14 580
原创 鸿蒙-HarmonyOS之初见
运行项目是需要先到上面这个页面点击绿色三角启动模拟器,上面红色方块代表模拟器已经启动成功,然后到工程页面点击绿色三角启动项目在模拟器运行,如下图。官网地址:https://developer.huawei.com/consumer/cn/当前最新的版本3.1 ,windows和Mac,Mac又分了arm和x86的CPU。新建项目自带有的代码,左侧目录结构有点像Android又有点像小程序。在这个页面进行创建,首次创建需要先下载,按顺序点击即可。修改World为Harmony,至此项目已经运行起来了,
2023-12-21 23:01:58 650
原创 展开说说:Android之常用的延时执行策略
耗时很短,但是也是有一定开销足以让它在主线程顺序之后执行,以上代码测试发现从new Thread到子线程内第一行代码执行耗时不足1毫秒。第二种和第三中都依赖Handler,先定义一个handler。适用一直在后台运行的定时任务,此处放在一个。200)就会先执行主线程然后进入子线程,lock.wait(2000)放开,放开,lock.wait(2000)是线程的方法,他休眠中不会释放锁。200),就会先进入子线程执行完。是线程的方法,他休眠中不会释放锁。200毫秒延时也就是注释。的方法,他休眠会释放锁。
2023-12-19 22:50:20 1543
原创 Android 运行报错Failed to open zip file.Gradle‘s dependency cache may be corrupt (this sometimes occurs
Android Studio 运行项目报错:Failed to open zip file.Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)Re-download dependencies and sync project (requires network)
2023-12-17 22:32:20 985
原创 展开说说:Android之广播BroadcastReceiver源码浅析
总体来看大概可以分为两步,两者是异步的通过BroadcastQueue内的handler消息发送BROADCAST_INTENT_MSG消息连接,分别是广播的发送和处理过程
2023-12-17 21:03:04 1197
原创 展开说说:Android之广播接收者
动态广播如果注册了不反注册会引起内存泄漏,还有个更严重的如果没有注册直接去做反注册会报错IllegalArgumentException:Receiver not registed引发程序闪退(这里要注意使用非当时的注册的context反注册就等于使用没注册的)。3.1.1 有序广播-发消息 在manifest注册intentFilter通过priority标签可设置有序广播的优先级,有序广播两个接收器action一样正常都会收到消息,按自身设置的priority优先级接收,高的可以阻断让低的收不到。
2023-12-03 22:40:35 1332
原创 展开说说:Android之Activity的intent-filter匹配
现在说说intent-filter匹配规则:1、action、category、data如果intent-filter中前面三者都定义了就需要分别匹配成功了才能启动对应的Activity;2、具体规则2.1 action,是一个字符串可以使用系统预定义的也可以自定义,一个intent-filter可能包含多个action,intent设置的action只需要匹配其中一个即为成功。2.2 category也是一个字符串,可以使用系统预定义的也可以自定义,intent如果设置了category
2022-10-25 23:28:50 1309 1
原创 Error:No such property: GradleVersion for class: JetGradlePlugin
Error:No such property: GradleVersion for class: JetGradlePlugin,问题关键所在是gradle版本和gradle插件版本没有对应,将两者对应问题便迎刃而解。
2022-10-22 10:42:35 1520
原创 展开说说:Android之Activity的生命周期
生命周期即事物从诞生到结束的过程。activity有七个生命周期方法分别对应一个activity从诞生到销毁的七个关键节点,它是由Android主动通知我们的,我们只需要在这些方法内处理这个时间点应该做的事情即可。举个例子每天清晨会有闹钟提醒我们起床美好的一天从现在开始、然后这一天中铃声还会提醒我们上课、下课、吃午饭、午休结束,下午开始上课、下课,最后是放学铃声响起这一天的学习结束。
2022-10-05 12:55:13 1290
原创 Android studio编译报错AAPT2 error: check logs for details
aapt 是Android Asset Packaging Tool的缩写,是编译和打包资源的工具。而aapt2是在aapt上做了优化。Android Gradle Plugin 3.0.0或者更高版本默认开启aapt2进行打包。As左上角点击File - invalidate caché/restart Android Studio - invalidate and restart 清理缓存并重启Android studio。才疏学浅,如有问题,欢迎指正,多谢。二 在此提供三个解决办法协助排查。
2022-09-25 22:45:39 1176
原创 展开说说:Android之dimens文件使用
选中res - 右击 - new - Android Resource File,文件名填写dimens、type选择Values(默认)点击ok。@demin/ 加 dimen的name属性即可使用其定义的value值。在dimens.xml写入内容,比如字号、宽高。才疏学浅,如有问题,欢迎指正,多谢。四 java文件使用。
2022-09-25 18:30:05 1997
原创 lAndroid studio编译项目报错:Program type already present: xx.xx.xx
Android studio在编译项目时,报错:Program type already present: xx.xx.xx,相信这个问题很多朋友都有遇到过,其实是依赖包冲突了,在工程内全局查找冲突的这个文件类名,定位到所在的jar包,发现一个以上的地方引入了这个jar包。第二个办法在app的下build.gradle中的defaultConfig节点配置,排除其他moudle引用的该jar包,不使用其进行编译。第一个办法就是删掉多余只保留一个包即可,重新构建就解决了。exclude '路径/jar包名'
2022-09-03 19:30:41 945
原创 OutOfMemoryError: Java heap space gradle compiling android,as编译报oom
前几天运行一个开源项目始终编译失败OutOfMemoryError: Java heap space gradle compiling android,经历了clear、Invalidate and restart无果,各种搜索最后得以解决希望能同样帮助您解决问题。提供四种方法,第四种一定要看!!!前三种都是是针对项目的而第四种是针对as的。项目根目录下面: gradle.propertiesorg.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m .
2021-05-16 18:13:31 423
原创 Android Studio代码红色报错但可以编译运行
有四种方法可行:1.删除项目的.gradle文件,重新编译。2.点击AndroidStudio菜单File -> Invalidate Caches/Restar,点击Invalidate and Restar 清理缓存重启。3.点击AndroidStudio菜单File ->close project然后把本项目从AndroidStudio的列表中删除,打开Android...
2019-03-29 23:13:32 2303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人