- 博客(156)
- 资源 (41)
- 收藏
- 关注
原创 深入ReactRouter:从快速上手到嵌套路由配置的全面指南
本博客深入探讨了在React中使用React Router v6进行路由配置的关键概念。涵盖了路由的快速上手、抽象路由模块、导航、导航传参、嵌套路由、默认二级路由、404路由配置以及两种路由模式。通过这篇博客,读者能够全面了解React Router v6的用法,为构建灵活的React应用提供了实用的路由配置知识。
2024-01-19 07:00:00 2821
原创 学习Redux:React状态管理的简明指南
本文深入介绍了在React中使用Redux进行状态管理的基础知识。我们学习了Redux的核心概念,包括State、Action、Reducer和Store,构建了单向、可预测的数据流架构。通过实现计数器应用,快速体验了Redux的基本用法,包括Action的定义、Reducer的创建和通过Dispatch触发State变化。使用React Toolkit简化了Redux集成,展示了在React组件中如何使用`useSelector`和`useDispatch`管理状态。学习了提交带参数的Redux Acti
2024-01-18 17:29:41 646
原创 React初探:从环境搭建到Hooks应用全解析
本篇博客深入介绍了React的基础概念和高级特性。我们从React的核心思想——组件化出发,学习了搭建开发环境、JSX的基础和高频应用场景、状态管理、事件绑定、组件通信等关键技术点。深入讨论了useEffect的使用和自定义Hook的实现,最后总结了React Hooks的使用规则。通过本文,读者能够全面掌握React的核心知识,为构建灵活、可维护的React应用打下坚实基础。
2024-01-16 22:12:03 1209
原创 微信小程序开发 - 必备理论知识
小程序中的组件样式是默认隔离的,即组件内部的样式不会影响到外部页面或组件。这种隔离有助于保持代码的独立性。组件内部可以定义data数据,用于存储组件的状态信息。data: {count: 0},})数据监听器用于监听组件内部data或properties的变化,当数据发生变化时触发相应的操作。data: {count: 0},},})纯数据字段是一种特殊的数据形式,用于在组件内定义一些纯粹的数据,不参与视图层的渲染。小程序中,组件有一系列的生命周期函数,包括created。
2024-01-15 18:51:38 989
原创 微信小程序 - 视图与逻辑 介绍
下拉刷新是一种用户在页面顶部向下滑动时触发的事件,通常用于实现页面的数据更新或重新加载。上拉触底是一种用户在页面底部向上滑动时触发的事件,通常用于实现分页加载更多数据。生命周期是指一个小程序从被创建到被销毁的整个过程。在这个过程中,小程序会经历不同的阶段和事件,开发者可以通过生命周期函数来执行相应的逻辑操作。生命周期函数是在特定时机会被自动触发的函数,开发者可以在这些函数中编写相应的逻辑代码。在小程序中,生命周期函数包括应用生命周期函数和页面生命周期函数。
2024-01-14 11:30:57 1209
原创 微信小程序 - 模板与配置 介绍
rpx是小程序中的尺寸单位,它是相对长度单位,可以根据屏幕宽度进行自适应缩放。1rpx 在不同屏幕宽度下的物理像素大小是相等的,这使得设计师可以更方便地设计界面,而不用考虑不同设备的屏幕大小。
2024-01-13 13:12:08 1553
原创 【nodejs】Express概念与使用介绍
Express是基于Node.js平台,从内置模块http封装出来的第三方模块,可以更方便的开发Web服务器。中文官网: http://www.expressjs.com.cn/
2023-12-29 17:13:00 472
原创 小程序 - 起步
什么是宿主环境宿主环境(host environment)指的是程序运行所必须的依赖环境。例如:Android 系统和 iOS 系统是两个不同的宿主环境。安卓版的微信 App 是不能在 iOS 环境下运行的,所以,Android 是安卓软件的宿主环境,脱离了宿主环境的软件是没有任何意义的!小程序的宿主环境手机微信是小程序的宿主环境,如图所示:小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能,例如:微信扫码、微信支付、微信登录、地理定位、etc…小程序宿主环境包含的内容。
2023-11-02 09:16:29 127
原创 mac版Android studio编译报错:Too many open files in system
原因大致因为mac系统有文件打开数上限,随着工程变大,编译时项目中build文件夹下生成文件数量过多,导致打开文件数超过了系统上限。本文章的解决办法是查看并提高这个上限,使编译顺利通过。查看修改持久化修改在文件中...
2022-06-14 14:20:34 1914 1
原创 Android开发开启无线调试
新版Android studio已经支持无线调试第一步,打开Device Manager参考:view->ToolWindos->Device Manager第二步,切换Physical标签,并进入Pair using wifi第三步,按二维码下方提示,在手机设置的开发者模式中,使用扫码匹配即可。我的手机是一加7p的,供参考。注意按as上描述,目前仅支持Android11系统。...
2022-04-08 12:28:18 4666 2
原创 组件化gradle语法,抽取confg.gradle
Gradle●Gradle构建工具的出现让工程有无限可能●Gradle核心是基于Groovy脚本语言,Groovy脚本基于Java且拓展了Java。因此Gradle需要依赖JDK和Groovy库。●和ant、maven构建有区别,gradle是一 种编程思想代码+讲解样式//第1种打印字符串方式: println("hello gradle")//第2种打印字符串方式:println "hello studio"点击sync打印。抽取公共配置...
2022-02-22 14:45:08 1868
原创 一个Demo带你重温Binder,经典不容错过!!
本例模拟实现了第三方登录的功能,一篇文章足以让你对Binder跨进程通信有一个认识。效果图如下本例中两个App,他们各定义了一个进程。Client应用(需要第三方qq账号登录)Server应用(假设是qq登录,情侣的那个页面)Client进程:等待接收Server应用回传的登录验证结果。Server进程:接收Client的唤起通知,接收到了说明有应用进行了第三方QQ登录。大致流程:在Client应用中点击QQ图标启动了Server应用清单文件中定义的service,从而唤起Server
2021-09-22 18:56:46 406
原创 一次对Handler的回忆~
几个热身问题一、handler内存泄漏测试1、handler的基本使用2、handler发送的过程中(休眠2s),关闭activity,消息仍然可以接收到。3、使用removeMessage的方式测试,发现没用。原因是还没有压入队列。4、destory的时候直接置空handler,发现有用。5、message.recycle方式:如果已经进消息队列了,还好说,如果还没进入消息队列,则会报异常。二、不能在子线程中创建handler1、理由是子线程中的looper还是空的三、TextV
2021-09-18 15:44:58 274
原创 Kotlin专栏开篇整理
Kotlin讲堂(《第一行代码》)我的Kotlin专栏菜鸟教程扔物线的kotlin教程视频官方网站官方示例官方网站 - 中文翻译Kotlin 官方在线工具Kotlin 在线工具
2021-09-16 16:34:51 423
原创 安卓PMS、AMS介绍原理分析,App启动流程分析等大杂烩
PackageManagerService和ActivityManagerService都是Zygote进程fork出来的,我之前敲了一段文字介绍Zygote进程的,有兴趣的朋友可以先看看:初识Zygote进程。另外有位简书大佬写的文章,内容很全, 值得推荐:APK安装流程详解PMS什么是PMS?PMS类关系图有界面安装Packagelnstaller无界面安装APK安装原理AMS什么是AMSAMS的通信方式介绍Activity跨进程跳转App启动流程A
2021-08-04 18:21:32 723
原创 换肤实例二,可扩展类型换肤库
榨干剩余价值,这是第二个实例步骤与第一个示例类似,如果不清楚请参考:QQ换肤源码实战,一步一步教你操作!!Demo下载PPT下载About网易换肤第一篇:换肤技术解密!网易换肤第二篇:本地换肤实现!网易换肤第三篇:动态换肤实现!架构师系列文章一览...
2021-08-01 15:37:05 194
原创 QQ换肤源码实战,一步一步教你操作
各位大佬周末快乐,没错,无聊的我又在搞事情。之前写过几篇讲解换肤原理的文章,没看过的朋友可以在文末链接点击跳转查看。本文是一个换肤的实战Demo,有兴趣的朋友可以下载参考:Demo下载地址。正文下载完成后在as中打开,项目目录如下:其中有项目module和换肤module已经在图中注明。换肤module不是用来直接运行的,而是用来打包成换肤包,放到指定位置,供主App加载,从而加载换肤包的资源,实现换肤效果。打包换肤包少时等待,打包完成后在as右下角会有提示:点击对应的locate就
2021-08-01 13:38:16 1158
原创 集中式登录架构设计(AOP)
录屏日志:代码:class MainActivity : AppCompatActivity() { private val TAG = "lr >>> " companion object { var isLogin = false } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState
2021-07-14 11:45:15 349 2
原创 Android 10 全面屏底部小横条的颜色,沉浸式设置等记录
有些安卓手机(如一加7p,8p)等,能在屏幕下方显示类似苹果手机那样的小横条。在小横条开启的时候会有布局显示问题,颜色设置等需求。我遇到的问题是布局被顶上去了,如图:需求是希望布局能沉浸到小横条后面去,最后效果如下:我是使用ImmersionBar实现的,设置如下:设置NavigationBar透明即可,可见小横条本质上就是NavigationBar。做了个参考Demo,有需要的可以参考。...
2021-07-09 16:33:18 9330 7
原创 MVP思想实现项目基础框架搭建
本文用MVP思想实现项目基础框架搭建,并用登录功能做例子,供参考。框架部分代码BaseView.java// View层基类public abstract class BaseView<P extends BasePresenter, CONTRACT> extends Activity { protected P p; @Override protected void onCreate(Bundle savedInstanceState) {
2021-07-02 17:48:38 299 1
原创 MVP思想精髓与解耦(Kotlin)
本文用来认识MVP项目结构,第二篇会补充处理内存泄漏等注意点。理论知识,吧啦吧啦~,没兴趣可以直接 跳至Demo部分。MVP初探关系:View收到用户的操作View把用户的操作,交给PresenterPresenter控制Model进行业务逻辑处理Presenter处理完毕后,数据封装到ModelPresenter收到通知后,再更新View方式:是双向的通信方式优点:View层与Model层完全分离所有的逻辑交互都在PresenterMVP分层较为严谨MVP思想精髓View
2021-07-02 16:02:40 287 7
原创 网易换肤第三篇:动态换肤实现!
脑图:https://note.youdao.com/s/DWUvTqgUDemo源码参考:这里。About网易换肤第一篇:换肤技术解密!网易换肤第二篇:本地换肤实现!网易换肤第三篇:动态换肤实现!架构师系列文章一览推荐
2021-06-17 17:50:16 391
原创 网易换肤第二篇:本地换肤实现!
完整脑图:https://note.youdao.com/s/V2csJmYSDemo源码:点击下载技术分析我们在换肤的第一篇介绍了换肤的核心思想。就是在setContentView()之前调用setFactory2()。第一篇的Demo利用的是AOP切面方法registerActivityLifecycleCallbacks(xxx)回调在setContentView()之前,从而在registerActivityLifecycleCallbacks的onActivityCreated()方法.
2021-06-17 17:13:29 350 1
原创 《第一行代码》Kotlin讲堂知识整理——第14章 Java与Kotlin代码之间的转换
14.6 Java与Kotlin代码之间的转换转换的方式很简单,相信很多同学都是知道的,本章内容也就不再赘述了。AS虽然能帮助我们进行一键代码转换,但是它只会按照指定的语法变化规律来执行转换工作,而不会自动应用Kotlin的各种优秀属性。本书最后一节Kotlin内容也到此结束了。预祝大家学有所成吧。附上文中代码地址《第一行代码》Kotlin讲堂知识整理...
2021-04-21 08:07:55 150 1
原创 《第一行代码》Kotlin讲堂知识整理——第13章 使用DSL构建专有的语法结构
13.7 使用DSL构建专有的语法结构DSL的全称是领域特定语言(Domain Specific Language),它是编程语言赋予开发者的一种特殊能力,通过它我们可以编写出一些看似脱离原始语法结构的代码,从而构建出一种专有的语法结构。本章的学习目标是通过告诫函数的方式来实现DSL,这也是Kotlin中实现DSL中最常见的方式。长久以来,我们都有在使用DSL,比如我们平时添加依赖库的时候,需要在build.gradle文件中编写以下内容:dependencies { implement
2021-04-21 07:55:43 276
原创 《第一行代码》Kotlin讲堂知识整理——第12章 编写好用的工具方法
12.8 编写好用的工具方法12.8.1 求N个数的最大最小值12.8.2 简化Toast的用法12.8.3 简化Snackbar的用法
2021-04-21 07:07:35 221 2
原创 《第一行代码》Kotlin讲堂知识整理——第11章 使用协程编写高效的并发程序
11.7 使用协程编写高效的并发程序11.7.1 协程的基本用法11.7.2 更多的作用域构建器11.7.3 使用协程简化回调的写法
2021-04-20 17:24:47 294
原创 《第一行代码》Kotlin讲堂知识整理——第10章 泛型的高级特性
10.6 泛型的高级特性10.6.1 对泛型进行实化10.6.2 泛型实化的应用10.6.3 泛型的协变10.6.4 泛型的逆变
2021-04-16 10:32:22 239 2
原创 《第一行代码》Kotlin讲堂知识整理——第9章 使用infix函数构建更可读的语法
9.5 使用infix函数构建更可读的语法infix fun String.beginsWith(prefix: String) = startsWith(prefix)infix fun <T> Collection<T>.has(element: T) = contains(element)@Testfun test() { // infix的用法 if ("Hello Kotlin" beginsWith "Hello") { pri
2021-04-14 11:24:07 278
原创 《第一行代码》Kotlin讲堂知识整理——第8章 泛型和委托
8.5 泛型和委托8.5.1 泛型的基本用法/*泛型类*/class MyClass<T> { fun method(param: T): T { return param }}/** * 泛型类调用 */@Testfun test() { val myClass = MyClass<Int>() val result = myClass.method(123)}/*泛型方法*/class MyClass {
2021-04-14 09:35:08 200
原创 《第一行代码》Kotlin讲堂知识整理——第7章 高阶函数的应用
7.6 高阶函数的应用7.6.1 简化SharedPreferences的用法val edit = context.getSharedPreferences("data", Context.MODE_PRIVATE).edit()edit.putString("name", "Tom")edit.putInt("age", 28)edit.putBoolean("married", false)edit.apply()fun SharedPreferences.open(block: Sha
2021-04-13 15:27:15 213 1
原创 《第一行代码》Kotlin讲堂知识整理——总目录
《第一行代码》Kotlin讲堂知识整理——第2章 探索新语言,快速入门Kotlin编程《第一行代码》Kotlin讲堂知识整理——第3章 标准函数和静态函数《第一行代码》Kotlin讲堂知识整理——第4章 延迟初始化和密封类《第一行代码》Kotlin讲堂知识整理——第5章 扩展函数和运算符重载...
2021-04-08 15:30:09 458
原创 《第一行代码》Kotlin讲堂知识整理——第5章 扩展函数和运算符重载
文章目录5.6 扩展函数和运算符重载5.6.1 大有用途的扩展函数5.6.2 有趣的运算符重载5.7 小结与点评5.6 扩展函数和运算符重载5.6.1 大有用途的扩展函数扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。相比于定义一个普通的函数,定义扩展函数只需要在函数名前加一个ClassName.的语法结构,就表示将该函数添加到指定类当中了。fun ClassName.methodName(param1: Int, param2: Int): Int {
2021-03-22 21:21:45 325 1
原创 《第一行代码》Kotlin讲堂知识整理——第4章 延迟初始化和密封类
《第一行代码》Kotlin讲堂知识整理——第4章 延迟初始化和密封类对变量的延迟初始化正因为Kotlin中出色的空指针检查机制,有时候会让我们不得不做很多非空判断才行,即使你非常确定它们不会为空。如下面这个例子private var msg: Msg = nulloverride fun onCreate(savedInstanceState: Bundle?) { ... msg = Msg("lala", 1)}fun onClick(view: View) {
2021-03-19 19:19:26 218 2
转载 955 加班少的公司名单(2021年)
最近跳槽的应该是非常之多,这跳槽的很多人中不乏有想从 996 公司跳槽到 955 公司的。 996 意味着早上 9 点上班,晚上 9 点下班,每周要工作 6 天。同时,这也意味着你几乎没有太多可以自由支配的时间。 没有人想要过这样的生活,这也是为什么 996 的话题总是被顶上热搜。 但是,你不上就有人上。如果不是为了以后更好地生活,谁 TM 又不想保持生活和工作的平衡呢? 加班多了,总是有顶不住的时候,总是有累的时候。 如果你想要去一个稍微 955 一点的公司的话,我这里给一个名单你参考一下...
2021-03-17 20:17:53 1408 2
原创 《第一行代码》Kotlin讲堂知识整理——第3章 标准函数和静态函数
3.7 Kotlin讲堂:标准函数和静态方法3.7.1 标准函数with、run和applylet标准函数的用法已经在上一章中介绍过了,不再赘述with函数with函数接收两个参数:第一个参数可以是一个任意参数的对象,第二个参数是一个lambda表达式。示例代码如下:val result = with(obj) { // 这里是obj的上下文 ”value“ // with函数的返回值}比如还是那个水果列表,现在我们要吃完所有水果,并将其打印出来val list = listOf
2021-03-17 20:00:31 241
Material Design交互设计之常见用法介绍Demo
2021-03-01
自定义thumb上带文本显示的拖动条Demo.zip
2021-02-25
Android未读消息拖动气泡示例Demo.zip
2021-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人