![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
安卓
文章平均质量分 91
星如雨グッ!(๑•̀ㅂ•́)و✧
这个作者很懒,什么都没留下…
展开
-
Android学习之路(29) Gradle初探
大家回想一下自己第一次接触Gradle是什么时候?,以及在gradle文件中各种配置, 这些都是啥wy啊。。特别对于一些小公司开发人员,因为接触架构层面的机会很少,可能在使用AS几年后都不一定对Gradle有太多深入了解,这是实话,因为笔者就是这么过来的。。而Gradle又是进阶高级开发的必经之路。好了,接下来进入正题,此系列笔者会由浅入深的方式,带领大家来了解下,Gradle背后究竟有哪些奥秘。本系列文章:Gradle筑基篇(一)-Gradle初探。原创 2024-02-03 20:43:48 · 1351 阅读 · 0 评论 -
Android学习之路(28) 进程保活组件的封装
远古时代,出现过很多黑科技,比如MarsDaemon,使用双进程守护的方式进行保活,在当时可谓风光无限,可惜在8.0时代到来就被废弃了。又比如后面出现的1像素Activity的保活方式,说他流氓一点不过分,如果每个人都使用这些操作,因为功耗的大大增加,会直接影响到手机使用寿命。因此各大手机厂商为了解决这一现象的发生,在系统层面对这些流氓行为做出了限制:后台进程即使你是要黑科技让进程优先级很高,也可能被杀死,所以我宁愿称是应用的求生而不是保活。原创 2024-02-03 20:27:55 · 1427 阅读 · 0 评论 -
Android学习之路(27) ProGuard,混淆,R8优化
使用java编写的源代码编译后生成了对于的class文件,但是class文件是一个非常标准的文件,市面上很多软件都可以对class文件进行反编译,为了我们app的安全性,就需要使用到Android代码混淆这一功能。针对 Java 的混淆,ProGuard就是常用的混淆工具,且他不仅仅是混淆工具,它同时可以对代码进行压缩优化混淆。下面我们来简单介绍下ProGuard工作流程。ProGuard 工作流程shrinkoptimizeobfuscatepreverigy。这四个步骤都是可选,但是顺序都是不变的。原创 2024-02-03 18:01:32 · 1772 阅读 · 0 评论 -
Android学习之路(26) ARouter APT技术详解
步骤然后在需要的地方加上注解就可以了。java复制代码本文在开始主要讲解一些注解和注解处理器的前置知识,且带大家自己实现了一个APT自动生成文件的demo,最后讲解下在ARouter中APT是如何再编译器动态生成几种帮助类的。原创 2024-02-03 17:56:32 · 1490 阅读 · 0 评论 -
Android学习之路(25) Theme和Style
低级扩展方式为保持与平台界面样式的兼容性,您应始终通过扩展框架或支持库中的现有样式来创建自己的样式。如需扩展样式,请使用parent属性指定要扩展的样式。然后,您可以替换继承的样式属性并添加新属性。例如</style>推荐扩展方式当然上述做法其实并不规范,官方建议我们直接继承支持库中的样式(已定义好相关的style)。不过,您应始终继承 Android 支持库中的核心应用样式。为与 Android 4.0(API 级别 14)及更高版本兼容,支持库中的样式会针对各版本中可用的界面属性进行优化。原创 2024-01-28 21:03:18 · 1617 阅读 · 0 评论 -
Android学习之路(24) ARouter原理解析
本文先介绍了ARouter使用过程中 的一些基本概念,理解了这些概念后,我们再从使用步骤触发,对每个使用节点进行了介绍。最后使用一张图总结了整个使用原理过程1.ARouter帮助类是如何生成的,这里使用到了APT注解处理器的技术 关于APT我们会在下一章:Android开源系列-组件化框架Arouter-(三)APT技术详解这里还有个有趣的现象,我们在调用路由表加载的时候: 使用了加载,但是查看里面代码:java复制代码居然是空的。。java复制代码可以看到这里使用了。原创 2024-01-21 20:56:10 · 2198 阅读 · 0 评论 -
Android学习之路(23)组件化框架ARouter的使用
, 默认通过扫描 dex 的方式 进行加载通过 gradle 插件进行自动注册可以缩短初始化时间解决应用加固导致无法直接访问 dex 文件,初始化失败的问题,需要注意的是,该插件必须搭配 api 1.3.0 以上版本使用!动态注册路由信息 适用于部分插件化架构的App以及需要动态注册路由信息的场景,可以通过 ARouter 提供的接口实现动态注册 路由信息,目标页面和服务可以不标注 @Route 注解,可选使用,通过 ARouter 提供的注册插件进行路由表的自动加载(power by。原创 2024-01-21 20:37:09 · 1452 阅读 · 0 评论 -
Android学习之路(22) 从模块化到组件化
在 Project 层级的 build.gradle 中 , 使用 apply from: “component.gradle” , 引入 component.gradle 配置;// 将 component.gradle 配置文件中的内容导入到该位置// 相当于引入头文件apply from 相当于引入头文件 , 将 component.gradle 配置文件中的所有内容 , 原封不动的拷贝到该语句所在位置;原创 2024-01-21 19:59:36 · 1584 阅读 · 0 评论 -
Android学习之路(21) 进程间通信-AIDL与Servce基本使用
Service的生命周期图!【Android】跨进程通信——AIDL、之Service基本细节使用之:精通。原创 2023-10-22 21:03:12 · 816 阅读 · 0 评论 -
Android学习之路(20) 进程间通信
1.为什么使用Binder?性能方面:在移动设备上(性能受限制的设备,比如要省电),广泛地使用跨进程通信对通信机制的性能有严格的要求,Binder相对于传统的Socket方式,更加高效。Binder数据拷贝只需要一次,而管道、消息队列、Socket都需要2次,共享内存方式一次内存拷贝都不需要,但实现方式又比较复杂。原创 2023-10-04 21:36:33 · 760 阅读 · 1 评论 -
Android学习之路(19) ListView详解
在Android开发中,ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。代码部分1.布局界面 activity_main.xml 代码:2.类文件 MainActivity.java 代码:代码解析1.ArrayAdapter适配器2.点击事件响应只能显示一段文本的listview太单调了,我们现在就来对listview的界面进行定制,让其丰富内容。代码部分1.布局界面 activity_main.xml 代码:2.类文件 MainAct原创 2023-10-03 17:04:11 · 2009 阅读 · 0 评论 -
Android学习之路(18) 数据存储与访问
1)MD5是什么鬼?答:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛 使用的一种散列函数,用以提供消息的完整性保护——摘自《百度百科》 简单点说就是一种加密算法,可以将一个字符串,或者文件,压缩包,执行MD5加密后, 就可以生产一个固定长度为128bit的串!这个串基本唯一!另外我们都知道:一个十六进制 需要用4个bit来表示,那么对应的MD5的字符串长度就为:128 / 4 = 32位了!原创 2023-10-03 15:45:16 · 1025 阅读 · 0 评论 -
Android学习之路(17) Android Adapter详解
如题,本节给大家带来的是构建一个可复用的自定义BaseAdapter,我们每每涉及到ListView GridView等其他的Adapter控件,都需要自己另外写一个BaseAdapter类,这样显得非常麻烦, 又比如,我们想在一个界面显示两个ListView的话,我们也是需要些两个BaseAdapter… 这,程序员都是喜欢偷懒的哈,这节我们就来写一个可复用的自定义BaseAdapter类~原创 2023-10-01 20:59:22 · 1776 阅读 · 0 评论 -
Android学习之路(16) Android 数据库Litepal
LitePal关系型数据库用起来还是很简单明了的,如果你对文章有什么疑惑或者指正,欢迎评论区留言!原创 2023-10-01 15:46:47 · 684 阅读 · 0 评论 -
Android学习之路(15) AMS与PMS详解
我们从系统启动 init 进程开始分析到 Zygote 进程创建、SystemServer 进程创建,大致的将整体流程进行了梳理。init 进程是系统内核启动后第二个启动的进程,该进程在用户空间。init 进程启动后会解析 init.rc 执行脚本启动 Zygote 进程和 ServiceManager 进程。Zygote 因为是由 init 进程启动的,所以它也是在用户空间。Zygote 的业务处理横跨 native 层和 java 层。startVm() 创建虚拟机。原创 2023-09-10 21:57:23 · 1247 阅读 · 1 评论 -
Android学习之路(13) Handler详解
普通的线程是没有looper的,如果需要looper对象,那么必须要先调用Looper.prepare方法,而且一个线程只能有一个looperHandler是如何完成跨线程通信的?Android中采用的是Linux中的 管道通信关于管道,简单来说,管道就是一个文件在管道的两端,分别是两个打开文件文件描述符,这两个打开文件描述符都是对应同一个文件,其中一个是用来读的,别一个是用来写的消息队列创建时调用JNI函数,初始化NativeMessageQueue对象。原创 2023-09-03 09:45:24 · 3183 阅读 · 0 评论 -
Android学习之路(12) setContentView详解
setContentView我们在Activity中经常见到,它的作用就是把我们的布局文件放在Activity中显示,下面我们根据源码分析setContentView是如何做到的注意Activity的setContentView和AppCompatActivity的setContentView是有一些区别的,所以我们要分析两钟setContentView,下面先分析Activity的(1).从Activity的setContentView这个方法开始可以看到第一句getWindow().setConten原创 2023-08-27 18:23:23 · 2099 阅读 · 0 评论 -
Android学习之路(11) ActionBar与ToolBar的使用
那找找为啥ActionBar的时候对的,直觉告诉我是theme的问题,于是找Theme.AppCompat.Light.DarkActionBar,点击进去看会看到actionBarPopupThem是Light的,就是menu菜单点击弹出那个actionBarTheme是深色系的,那么控制按钮图标和主副标题颜色就是白色的原创 2023-08-27 17:43:56 · 2086 阅读 · 0 评论 -
Android学习之路(10) Bundle
Bundle从字面上解释为“一捆、一批、一包”,结合上述几个应用场合,可以知道Bundle是用来传递数据的,我们暂将Bundle理解为Android中用来传递数据的一个容器。官方文档对Bundle的说明如下:Bundle实现了Parcelable接口,所以他可以方便的在不同进程间传输,这里要注意我们传输的数据必须能够被序列化。bundle的作用主要时用于传递数据;原创 2023-08-26 00:16:20 · 933 阅读 · 0 评论 -
Android学习之路(9) Intent
Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。Activity 表示应用中的一个屏幕。通过将 Intent 传递给 startActivity(),您可以启动新的 Activity 实例。Intent 用于描述要启动的 Activity,并携带任何必要的数据。如果您希望在 Activity 完成后收到结果,请调用 startActivityForResult()。原创 2023-08-23 00:13:26 · 475 阅读 · 0 评论 -
Android学习之路(8) Activity
3.Activity的创建流程4.Activity,Window与View的关系5.Activity,Task和Back Stack的一些概念欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Markdown。原创 2023-08-20 22:34:23 · 15655 阅读 · 2 评论 -
Android学习之路(7) Frament
Fragment 表示应用界面中可重复使用的一部分。fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在。它们必须由 activity 或其他 fragment 托管。fragment 的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构。原创 2023-08-20 21:46:28 · 775 阅读 · 0 评论 -
Android学习之路(6) 其他UI控件
ImageView(图像视图)RadioButton(单选按钮)&Checkbox(复选框)开关按钮ToggleButton和开关SwitchProgressBar(进度条)SeekBar(拖动条)RatingBar(星级评分条)ScrollView(滚动条)原创 2023-08-27 16:34:03 · 726 阅读 · 0 评论 -
Android学习之路(5) UI控件之Button (按钮)与 ImageButton (图像按钮)
StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector >,我们只需要将Button的background属性设置为该drawable资源即可轻松实现,按下 按钮时不同的按钮颜色或背景!drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态~state_focused:是否获得焦点state_window_focused:是否获得窗口焦点state_enabled:控件是否可用。原创 2023-08-15 23:53:30 · 1411 阅读 · 0 评论 -
Android学习之路(4) UI控件之输入框
本节引言:在本节中,我们来学习第二个很常用的控件EditText(输入框);可以接受用户输入!原创 2023-08-14 00:08:18 · 659 阅读 · 0 评论 -
Android学习之路(4) UI控件之文本框
在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 在上述代码中,width和height分别代表要设置的视图的宽度和高度,可以是具体的像素值,也可以使用特殊常量进行设置,如LayoutParams.WRAP_CONTENT表示自适应内容大小,LayoutParams.MATCH_PARENT表示填充父容器。原创 2023-08-13 22:30:27 · 729 阅读 · 0 评论 -
Android学习之路(2) 设置视图
在Android开发中,可以使用LayoutParams类来设置视图(View)的宽度和高度。LayoutParams是一个用于布局的参数类,用于指定视图在父容器中的位置和大小。 在上述代码中,width和height分别代表要设置的视图的宽度和高度,可以是具体的像素值,也可以使用特殊常量进行设置,如LayoutParams.WRAP_CONTENT表示自适应内容大小,LayoutParams.MATCH_PARENT表示填充父容器。原创 2023-08-13 19:53:24 · 1216 阅读 · 0 评论 -
Android学习之路(3) 布局
前几个小节的例程中,XML文件用到了LinearLayout布局,它的学名为线性布局。顾名思义,线性布局 像是用一根线把它的内部视图串起来,故而内部视图之间的排列顺序是固定的,要么从左到右排列,要 么从上到下排列。在XML文件中,LinearLayout通过属性android:orientation区分两种方向,其中从左 到右排列叫作水平方向,属性值为horizontal;从上到下排列叫作垂直方向,属性值为vertical。原创 2023-08-13 19:44:49 · 1629 阅读 · 0 评论 -
Android学习之路(2) 文本设置
Android学习之路(1) 文本。原创 2023-08-06 20:28:38 · 766 阅读 · 0 评论 -
Android学习之路(1) App工程的项目结构
一个是app(代表app模块),另一个是Gradle Scripts。原创 2023-08-06 10:02:06 · 1476 阅读 · 0 评论