- 博客(73)
- 资源 (9)
- 问答 (4)
- 收藏
- 关注
原创 Flutter中添加全局防护水印的实现
随着版权意识的加强,越来越多的应用开始在应用内部增加各种各样的水印信息,防止核心信息泄露,便于朔源。效果如下:在Flutter中增加全局水印的方式,目前有两种实现。方案一,在native层添加一个遮罩层,但这种方式需要双端都要开发,效率低下,维护成本高,优点当然也有,那就是性能高。方案二:直接在Flutter中添加一个悬浮层实现企微,飞书等界面的水印效果,就如上图中的效果一样。为了凸显Flutter的高效,当然是直接使用Flutter中的Api进行实现。
2024-12-30 22:02:28
885
原创 Flutter中自定义气泡框效果的实现
在用户界面的设计中,气泡框(Bubble)是一种非常有效的视觉工具,它可以用来突出显示信息或提示用户。气泡框广泛应用于聊天应用、通知提示等场景。在 Flutter 中,虽然有很多现成的气泡框组件,但如果你想要更多的自定义控制,使用 CustomPainter 是一个非常好的选择。在这篇博客中,我们将介绍如何使用 CustomPainter 自定义绘制气泡框,并将其应用到 Flutter 中。
2024-09-06 16:21:13
1051
原创 Flutter自定义通用防抖的实现
在前端项目开发中,点击事件的防抖是一个永远无法错开的点,特别是针对一些复杂的业务场景,如果不做好防抖操作,就会导致页面或功能触发多次,引发异常或闪退。这种方案只是提供了一种防抖的实现,当然也可以自定义通用的Button,通过点击事件触发的时间自行判断处理。在Flutter中可以通过扩展函数的特性 对Function增加全局扩展函数,实现防抖效果。
2024-07-30 20:13:40
533
原创 Flutter 中自定义DNS解析的实现
为了提升Flutter中网络请求的速度,集成了阿里云的DNS解析服务,在官方示例中未提供基于Dio的实现, 因此经过调研后,尝试基于Dio进行自定义扩展实现,最开始做的时候,首先想到的是使用自定义Dio的拦截器进行实现,经过一系列的调研后,发现Dio中拦截器的执行顺序是在DNS解析之后,所以即使在拦截器中实现了DNS解析,也毫无意义,因此采用了自定义Proxy代理的方式进行实现。第二步,给Dio增加自定义代理。第一步创建Proxy。
2024-07-30 19:01:29
895
原创 Flutter中实现字体跑马灯
在业务需求开发过程中,经常有需要用到跑马灯效果来展示一些提醒文案,达到醒目的效果,在Flutter中要实现跑马灯的效果,需要借助Timer进行实现,可根据示例,结合自己的项目进行自定义扩展改造,达到项目所需效果。
2024-07-29 17:55:21
826
原创 Flutter中同步与异步
处理一次性异步操作的Future。:处理连续异步数据流的Stream。:在Future完成或失败后构建一次 UI。:每次Stream发送新数据或状态变化时更新 UI。:适用于单次的异步操作,例如网络请求、数据库查询等。:适用于多次的异步数据更新,例如实时数据、传感器数据、WebSocket 数据等。等待所有Future对象完成,并返回所有结果。Future.any等待第一个完成的Future对象,并返回其结果。如果任何一个Future抛出异常,则返回第一个抛出的异常。Future.any如果所有。
2024-06-04 15:18:53
1738
1
原创 Android获取经纬度的最佳实现方式
Android中获取定位信息的方式有很多种,系统自带的LocationManager,以及第三方厂商提供的一些定位sdk,都能帮助我们获取当前经纬度,但第三方厂商一般都需要申请相关的key,且调用量高时,还会产生资费问题。这里采用LocationManager + FusedLocationProviderClient 的方式进行经纬度的获取,以解决普通场景下获取经纬度和经纬度转换地址的功能。
2024-03-25 10:58:13
5496
2
原创 Flutter中并发的实现与理解
Isolate可以理解为dart中的线程,但它又不同于线程,准确的说应该叫做协程,协程最大的优势就是它具有极高的执行效率,因为协程中子程序的调用不需要线程的切换,所以对于线程数量越大的程序来说协程的优势就越明显。每个isolate都有自己独立的执行线程和事件循环,以及内存,所以isolate之间不存在锁竞争的问题,各isolate之间通过消息通信。移动端页面(包含Android、iOS、Web)构建的特性—树形结构构建布局、布局解析抽象、绘制、渲染,这一系列的复杂步骤导致必须在同一个线程完成。
2024-03-20 09:08:54
1532
1
原创 Flutter中自定义Dialog
Dialog在不同的平台,都是一种重要的交互方式,在Flutter中,Dialog也是有很多种,但大多数场景的交互,都需要根据项目的主题或一些特定的交互去实现自定义的Dialog。
2024-03-19 20:29:28
1337
原创 Flutter截屏与长截屏的实现
在做App开发中,获取当前视图的截图基本都会用到的,在Android中,我们可以通过视图的id获取当前视图的bitmap进行编辑操作,在Flutter中想获取Widget的截图针对不同的场景也是需要一个key进行绑定截图。这里介绍的Flutter截图的方式主要分为两种:视图可见时的截图与不可见的截图。
2024-03-17 10:11:58
2702
原创 C++ 类
使用时或类的定义就是对象,使用时必须添加类的头文件。公有成员可以被所有函数访问,私有成员只能被自己的成员函数访问。在静态成员定义时,其static关键字只能在头文件中进行声明,在定义时不能重复static关键字}静态成员不能在类的内部初始化,只能在类的外部定义和初始化每一个静态成员。静态成员一旦被定义,将一直存在于程序的整个生命周期中。重新定义实现基类的函数,添加自己扩展的实现。最后要添加基类的调用。...
2022-08-16 16:40:24
597
原创 C++ 字符串string
在C++中提供了基于char数组实现的string字符串,同时也提供了丰富的函数帮我们实现一些功能需求,也可以根据自己的需求进行定制扩展。
2022-08-11 16:22:59
1179
原创 C++逻辑运算符
逻辑运算作为编程中不可或缺的一部分,当有逻辑相关的处理时,C++ 提供了很多相关的逻辑表达式如:if,do-while,switch等。
2022-08-09 15:51:45
8516
原创 C++容器
C++是一种静态的数据类型,在编译器进行类型的检查,代码执行是从上到下的执行,以函数为执行单元。因他是面向过程的。默认的int,short,long都是带符号类型的,添加unsigned 进行修饰,可以设置为无符号类型,表示不接收负数,节约空间...
2022-08-08 16:49:18
293
原创 C++循环的使用
循环作为重复执行某一项动作的主要组成,在C++中提供了for,while,do/while的方式简单快捷的实现循环任务的执行。
2022-08-05 16:54:14
1545
原创 C++变量与基本类型
C++中也包含了很多种类型,比如char,int,bool,float,double等,使用不用的类型进行变量的定义解决不同场景的问题。
2022-08-04 15:53:59
967
原创 C++指针和引用
C++中指针和引用贯穿整个开发流程,其中指针函数,常量指针,智能指针等都是开发中必不可少的,只有了解其使用才能做出更加鲁棒性的项目。
2022-08-03 17:02:04
1544
原创 C++基础语法
C++中函数的入口是main函数,每个C++程序都包含一个或多个函数,但必须包含一个main函数,操作系统是通过main来运行C++程序函数包含四个部分返回类型,函数名,括号包围的形参列表,函数体。一个程序的运行前要经过编译阶段,把对人友好的代码按照一定规则编译解析成对机器友好的代码,然后加载到内存中运行。...
2022-08-01 16:41:22
199
原创 RecyclerView高效使用第二节
开发中列表用的最多,但性能可能也是最容易忽略的一部分,在做性能优化时,我们都知在编写布局时尽量采用约束布局,减少布局的嵌套层次,减少冗余的背景以提示布局解析渲染的速度,但这只是优化的其中一点。接下来参考官方提供的API结合实际场景对列表相关的做进一步的优化。.........
2022-07-28 17:50:48
685
原创 RecyclerView的高效使用第一节
在开发的过程中列表相关的布局是最不可或缺的一部分,而掌握一些高效的技巧可以帮助我们提升开发效率的同时,还能优化代码,减少冗余和bug的产生。在UI绘制时,免不了进行细节和样式的调整,如果每次的调整都去run之后查看效果,则效率低下,使用listitem,则可以避免运行,直接使用AndroidStudio自带的预览功能进行调试......
2022-07-26 17:10:22
414
原创 Jetpack之ViewModel源码解析
ViewModel是Jetpack框架集合中不可或缺的重要库之一,替我们管理着项目框架中的数据,相当于一个LiveData的数据总管一样。它将视图与数据分离,对数据进行管理,当应用横竖屏切换时,不再需要考虑数据的存储与恢复。......
2022-07-08 10:42:27
411
原创 Java中String的解读
在使用Java进行开发时,用到最多的类莫过于String对象了,在jdk1.8之前,其内部使用了char数组来保存字符串信息。到了jdk1.9之后又变成了byte数组。根据上图所知,String类是final修饰的保证了其不可继承,且不可变的,因此它是线程安全的,其中value数组就是用来保存String的值信息的,而hash值主要用于在HashMap中生成Key的。1,字符串常量池StringPool在开发中,我们大量的使用了字符串,官方为了提升性能,减少内存占用,就在引入了字符串常量池的概念,相
2022-05-13 14:22:48
307
原创 Android中组件间通信解耦的实现方案
在android中进行组件间拆分时,经常会遇到组件间通信的场景,一般是使用接口与实现的方式,但该方式存在一定的耦合,可能出现互相依赖的场景,为了解决该问题,就需要使用到一些组件间间解耦的方案。方案一,使用ARouter的IProvider1)创建一个接口类并继承自ARouter中的IProviderpublic interface Study extends IProvider { void open();}2)新建一个Study接口的实现类,并添加ARouter的注解@Route
2022-05-12 14:43:48
1090
原创 Java中Thread的基础
Thread是计算机中的最新执行单元,在Java中使用多线程可以提高复杂逻辑的执行速度(对一致性要求低的)。一,线程的优先级线程可以设置优先级,范围在1~10,默认的优先级是5,优先级高的线程分配的时间片(操作系统分配给线程的一个个时间片,当线程的时间片用完了就会发发生线程的调度,并等待下次分配)数量要多于优先低的线程。频繁阻塞的线程需要设置较高的优先级;偏重计算的线程则设置较低的优先级。注:线程的优先级不能作为程序正确性的依赖,因为在不同的操作系统上会存在一些差异。二,线程的状态1)New 线
2022-04-26 16:48:20
507
原创 Handler实现原理及源码解析
一,Handler的使用1)创建全局静态常量class Cons{ static final int MSG_WHAT_0x1000 = 0x1000; static final int MSG_WHAT_0x1001 = 0x1001;}2)创建Handler对象private static Handler handler = new Handler(new Handler.Callback() { @Override public bool
2022-04-25 17:40:26
794
原创 Android SDK初始化优化之ContentProvider
2021-06-02 05:08:06.153 5819-5819/com.example.viewpagerstudy D/StudyApplication: attachBaseContext SDK init()2021-06-02 05:08:06.203 5819-5819/com.example.viewpagerstudy D/StudyProvider: onCreate SDK init()2021-06-02 05:08:06.244 5819-5819/com.example.vi
2021-06-03 20:39:36
828
1
原创 Android布局加载流程
在Android中,如果不适用Component的情况下,大部分的UI界面,都是使用xml的形式进行编写绘制,然后在onCreate方法中使用setContentView的方式进行加载的。接下来就来分析setContentView中的布局加载流程1)入口从onCreate方法开始 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setCont
2021-03-03 19:57:19
491
1
原创 Android 11中Activity启动过程源码分析
Android中ActivityManagerService简称AMS,主要负责Android中四大组件创建启动管理。1)从调用startActivity开始startActivity(Intent(this,MainActivity::class.java))2)进入Activity中的startActivity,源码5664行public void startActivity(Intent intent, @Nullable Bundle options) { if (mIn
2021-03-02 19:30:33
1776
4
原创 RxJava之Flowable背压模式
由来,主要解决上游不停的发射大量的事件,导致下游接收不过来,导致的内存泄露背压模式,用于处理大量的事件时采用(当事件超过1000个时建议采用Flowable),用于替换Observable 在2.0版本之后才有,其中Flowable的效果等同于Observable的。使用时,Observable对应的下游是Observer,Flowable对应的下游是Subscriber1. Flowable主要有四种模式 BackpressureStrategy.ERROR 上游发送大量的事件,下游阻塞,处理不
2020-12-11 18:35:13
532
QtAndrod实现微信登录及java发送数据到QML界面
2019-01-28
应用打系统签名后在android5.1上无法加载so
2017-10-20
Android应用升级时,采用静默安装,一直提示程序停止运行
2016-09-28
WebVew加载的网页里面输入框输入内容后无法删除?
2016-08-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人