自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bdmh的专栏

QQ:515840062

  • 博客(195)
  • 资源 (12)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android:registerForActivityResult

中我们提到过Fragment中的onActivityResult已经废弃了,推荐使用registerForActivityResult去注册一个ActivityResultContract契约,从而启动一个forResult的Activity来达到目的,所以这里就看看这个流程是如何进行的。在MainActivity执行commitNow的时候,就会执行到Fragment的performAttach方法,这里改变了mState的值。对于接收返回的result,道理类似,大家可以根据断点堆栈了解一下。

2024-01-23 10:49:56 417

原创 Android:FragmentActivity

平时我们在Fragment中startActivityForResult一个Activity后,会使用onActivityResult来接受返回结果,那么在较新的androidx中,Fragment中的相关操作已经废弃,虽然还能用,但已经提供了更好的接口去实现了。FragmentActivity中其它的方法,基本都是和生命周期相关,也比较常见,比如onCreate,onCreateView,onResume等,大家自己看看就能理解了。上面这些代码,大家打上断点,操作过程中就会看到它的来龙去脉。

2024-01-03 09:55:21 677

原创 Android:FragmentHostCallback

对于这几个属性是如何传进来的,就要说到FragmentHostCallback的子类HostCallbacks,HostCallbacks是FragmentActivity的内部类,FragmentActivity中有一个属性,会自动创建HostCallbacks对象。官方的说明如下,它整合了Fragment持有者的操作,Fragment可能被任何对象持有,比如Activity,为了管理这些Fragments,提供该类,重写方法去适配持有者。这样整个流程就通下来了,包括权限的申请回调也在这里。

2023-12-12 10:28:22 190

原创 Android:BackStackRecord

BackStackRecord:fragment回退栈,继承自FragmentTransaction,并且实现了OpGenerator接口,OpGenerator接口用来添加或弹出事务的,后面会提到。大家注意第一行代码,判断事务是否提交,已经提交就会抛出异常,而mCommitted被置位true以后,是不会再有置为false的机会了,所以如果你重复使用同一个事务进行commit,那么第二次必然报错。commit,非立即生效,事务会被添加到队列,交由FragmentHostCallback( 《

2023-11-30 16:40:28 255

原创 Android:FragmentTransaction

上一篇我们大概介绍了FragmentManager的大致工作流程,知道了每个动作都会添加到Op队列里,并由FragmentTransaction进行管理,那么我们就来看看FragmentTransaction的具体内容。最终调用父类的addOp方法,创建了一个Op对象,并传入OP_HIDE值和要操作的Fragment对象,然后将其添加到mOps列表中。在这些值里面,我们看到了非常熟悉的一些操作,比如add,hide,replace等,每个动作都对应一个值。有了值,就会为每个动作分配定义一个对象。

2023-11-28 17:03:23 265

原创 Android:从源码看FragmentManager如何工作

一个Activity中,在某一个容器中,更换不同的Fragment,从而显示不同的界面,这个场景相信大家已经非常熟悉了,也知道Activity是通过FragmentManager来管理嵌入的Fragments的,所以今天就来看看FragmentManager是如何工作的。当添加完一系列的动作后,操作并没有生效,我们需要调用commit或者commitNow来提交事务,才能看到最终的结果。这了出现了一个HostCallbacks,继承自FragmentHostCallback,看看它的初始化。

2023-11-28 17:02:10 280

原创 Flutter:安装依赖报错doesn‘t support null safety

大概的意思是,你当前的系统sdk版本是3.1.3,是支持空对象的安全技术,而你要引入的http的版本小于0.13.0,不支持空安全,所以两个不匹配,报错。在这个区间的http包(http >=0.2.8+2

2023-11-06 15:27:29 2209

原创 Flutter配置Android SDK路径

原因就是Flutter找不到Android的SDK路径,所以无法识别模拟器,我们用flutter doctor命令检查环境时,就好看到提示。在使用VSCode作为开发Flutter的工具时,当选择调试设备时,通常看不到android的模拟器,只能看到Chrome之类的。

2023-10-09 10:21:32 1935 2

原创 未pip设置国内镜像

最后在命令行窗口中使用 pip install 命令安装即可。“用户名”你的用户名,比如“C:\Users\张三”

2023-09-19 17:33:42 89

原创 字节跳动春招——特征提取

某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。比如,特征在第2/3/4/7/8帧出现,那么该特征将形成两个特征运动2-3-4 和7-8。其中,第一个数字是该帧的特征个数,接下来的数字是在特征的取值;比如样例输入第三行里,2代表该帧有两个猫咪特征,和N满足1≤N≤100000,M满足1≤M≤10000,一帧的特征个数满足 ≤ 10000。特征在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3。现在,给定每一帧的特征,特征的数量可能不一样。

2023-06-02 11:23:58 657

原创 字节跳动春招——雀魂启动

给人造成了无解,让人误认为剩下的12张牌中都是顺子或刻子,而且例子中也这样体现出来的,所以按照这个逻辑写代码,一定是错的。1 1 1 1 2 2 3 3 5 6 7 7 8 9 用1做雀头,组123,123,567,789的四个顺子,可以和牌。1 1 1 2 2 2 6 6 6 7 7 7 9 9 可以组成1,2,6,7的4个刻子和9的雀头,可以和牌。现在,小包从36张牌中抽取了13张牌,他想知道在剩下的23张牌中,再取一张牌,取到哪几种数字牌可以和牌。可以组成1,2,6,7的4个刻子和9的雀头。

2023-05-31 17:21:50 882

原创 字节跳动春招——聪明的编辑

万万没想到,我被开除了,临走时老板对我说: “做人做事要兢兢业业、勤勤恳恳、本本分分,人要是行,干一行行一行。要是不行,干一行不行一行,一行不行行行不行。用不了多久,我就会出任CEO,当上董事长,迎娶白富美,走上人生巅峰,想想都有点小激动呢!3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC。2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello。

2023-05-24 14:18:09 455

原创 天然蓄水池

经过分析,选取s[1]和s[8]时,水库蓄水量为15;同样选取s[1]和s[6]时,水库蓄水量也为15。例如,当山脉为s = [3, 1, 2]时,则选取s[0]和s[2]作为水库边界,则蓄水量为1,此时输出:0 2:1。选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄水量需排除山脉占用的空间。经过分析,选取s[1]和s[6]时,水库蓄水量为19(3 + 7 + 4 + 5)如果无法蓄水,则返回0,此时不返回边界。当山脉`s = [3, 2, 1]时,不存在合理的边界,此时输出:0。

2023-05-07 15:55:32 494

原创 最小调整顺序次数(特异性双端队列)

有一个特异性的双端队列,该队列可以从头部到尾部添加数据,但是只能从头部移除数据。小 A 一次执行 2n 个指令往队列中添加数据和移除数据, 其中 n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到 n , n 个指令是移出数据 现在要求移除数据的顺序为 1 到 n , 为了满足最后输出的要求, 小 A 可以在任何时候调整队列中的数据的顺序 请问,小 A 最少需要调整几次才能满足移除数据的顺序正好是 1 到 n。

2023-05-01 08:45:44 172

原创 单向链表中间节点

求单向链表中间的节点值,如果奇数个节点取中间,偶数个取偏右边的那个值。

2023-04-30 10:17:04 954

原创 开心消消乐

解题思路:遍历二维数组,遇到某个位置的值为1,则开始查找它周围8个方向的位置的值,如果是1,置为0。然后继续遍历下一个元素。第一行输入两个整数,分别表示矩阵的行数 N 和列数 M,取值范围均为 [1,100]接下来 N 行表示矩阵的初始值,每行均为 M 个数,取值范围 [0,1]读取输入数据代码略,直接使用定义好的数组。输出一个整数,表示最少需要点击的次数。

2023-04-29 11:27:32 789

原创 Android:URLEncoder空格被转码为“+”号

另外,Android提供了Uri.encode,虽然可以正常转码空格,但是它不需要转换的字符和URLEncode有一点差别,大家在用的时候,根据情况选择即可。但当使用URLEncoder时,会发现字符串中的空格被转换成“+”号,如果编码后的内容入库后,将导致读取时,前段本来是空格的地方,会显示成“+”号字符。Android前段和后端接口交互时,经常会遇到特殊字符,比如表情、特殊标点等,这样在Url中是无法识别的,需要进行转码,后端进行解码交互。建议自己仿照官方的代码,写一套自己转码和解码过程,这个不难的。

2023-01-09 10:04:13 2337

原创 Glide:EngineResource

这个队列是用来创建ResourceWeakReference对象的,是对EngineResource的弱引用。EngineResource是一个资源包装器,实现Resource接口,运行资源计数。在ActiveResources中,有对它的引用队列。先来看看EngineResource的属性。

2022-11-14 10:18:23 301

原创 Glide:DecodeJob

参阅这个类的作用是,对缓存中数据或者原始资源进行解码、转换等操作,可以理解为一个作业,由EngineJob启动,内部通过相关对象对资源进行处理。先来看一下内部的枚举定义。DecodeJob在Engine中的waitForExistingOrStartNewJob方法中,由DecodeJobFactory创建,并执行DecodeJob的init方法。init方法中会初始化decodeHelper对象。

2022-11-09 10:30:06 365

原创 Glide:DecodeHelper

这个过程会传入一堆的参数,如用来加载图像的组件的长和宽,缓存策略,资源对象类型,优先级等等,就不再一一说明了。DecodeHelper是作为解码作业DecodeJob的助手类,用来获取解码相关对象或属性信息的。它的初始化方法init是在DecodeJob的init中调用的。这个类里包含两个枚举类型。

2022-10-27 15:03:27 295

原创 Glide:EngineJob

EngineJob这个类是用来通过添加和移除回调,来管理一个load过程,当load完成时,通知回调。EngineJob是在Engine类中,通过EngineJobFactory创建的。参考。先来看看EngineJob中的属性。ResourceCallbacksAndExecutors是一个内部类,管理资源加载的回调和相关线程。实现了Iterable接口。内部有一个List集合。用来保存ResourceCallbackAndExecutor对象(注意这个末尾不带“s”)。

2022-10-20 15:31:15 491

原创 Java:对象池Pools

当我们创建了一些对象,又希望在某些时候重复使用,这样可以避免对象的频繁创建和引起垃圾回收,提高使用效率。这时,对象池就可以帮我们处理这个事情了。比如创建了几个数组,那我可以先把他们保存起来,需要使用时,从池子里取出来,存放新的数据或者复用数据都是可的。对象池的代码也相对简单,具体来看一下:Pools是一个final类。它里面有一个接口。Pools.java文件中包含两个静态类。

2022-10-17 16:02:41 466

原创 Glide:ActiveResources

文章中,我们多次看到了ActiveResources这个对象,我们可以理解为活动的资源,今天就来分析一下ActiveResources的代码。这是一个同步方法,根据key,先从弱引用队列中移除掉该资源,并返回该资源。如果这个资源存在,则执行资源重置。资源监听是被定义在 EngineResource类中,Engine实现了这个接口。ResourceWeakReference 是一个内部类,维护弱引用资源对象。来看activeResources.deactivate。

2022-10-14 14:24:25 166

原创 Glide:Engine

这篇文章就来介绍一下Engine 这个类。Engine是负责开始加载和管理活动的以及在缓存中的资源。它实现以下三个接口。分别看一下这这三个接口。

2022-10-12 14:31:42 178

原创 Glide:Registry

在上一篇中,我们提到了,通过自定义的Module,可以替换掉Glide默认的组件,比如网络框架,这里就涉及到Registry这个类了。Registry这个类是用来管理Glide中注册的组件的,比如加载、解码、编码等,可以扩展和替换。我们先来看看它里面有些什么。这里只介绍各自负责的功能,具体的代码会陆续讲解。上面这些目前还是比较晦涩的,后面会慢慢展开来讲。Registry对象是在Glide的构造方法中创建的。我们看看Registry的构造方法。

2022-10-11 14:17:07 112

原创 Glide:AppGlideModule

上面代码中,getAnnotationGeneratedGlideModules方法就是创建GeneratedAppGlideModuleImpl这个类的,GeneratedAppGlideModuleImpl类自动生成的位置在build目录下。开发人员就可以自己去控制了。那GeneratedAppGlideModuleImpl这个类是什么时候被用到的呢,我们回到Glide.java中,加入我们使用下面代码。加入我也不想用okHttp,我想自己写一个网络请求,让Glide使用可不可以,当然可以。

2022-10-10 14:52:10 377

原创 Glide:GlideBuilder

annotationGeneratedModule 是可以通过注解方式,自动创建的,用户可以通过自定义的Module来设置一些选项或者注册自己的组件,比如使用自己的网络组件,这个后面会讲。Builder中的这些设置,我们都可以通过自定义的AppGlideModule子类的applyOptions方法进行设置。从名字看,大家应该不会感到陌生,这是Android中经常会遇到的Builder模式,它为Glide提供了默认的配置。这些过程完成后,就会调用Builder的build方法创建Glide实例了。

2022-10-09 14:32:51 246

原创 初始化:Glide.java

该方法,返回RequestManagerRetriever对象,RequestManagerRetriever是一个提供了一些静态方法,用来创建com.bumptech.glide.RequestManager实例,并可以在activity和fragment中检索对应的com.bumptech.glide.RequestManager对象。在Glide内部,定义了一个私有的静态变量glide,看上面的代码就很清楚的看到,Glide内部使用的是单例模式。在get方法中,使用了检测双锁的机制,来创建单例。

2022-10-09 14:32:36 279

原创 Glide环境搭建

当然如果我们要对Glide做一些全局的设置,或者替换已有的框架,比如想把网络框架替换为自己的(如okhttp,volley等),这些后面会陆续讲解。上面就是一个最基本的应用,从网络下载一个图像,然后显示到imageView中。使用Glide,需要引入几个包,在gradle文件中引入。有了上面的内容,Glide最常用的功能就可以使用了。Glide.with有很多重载,后面我们会详细说。这些设置在RequestOptions中体现。Glide的gitHub地址。

2022-10-09 14:32:16 368

原创 Java:从字节码看Enum类型

从以上字节码我们看到,它会为每个枚举值创建一个对象,保留名字和对应的值,还要创建一个数组来保存所有的枚举,相比一个int类型的数值来说,确实比较占用内存。枚举类型对于我们访问非常的方便和清晰,但是却有很多同学是不建议多多地使用枚举类型,原因就是枚举类型还是比较占用内存的。接下来我们看static这段,这是初始化的工作,大概的流程就是调用Enum的构造方法,创建数组,保存三个枚举值,具体看注释吧。然后就是,我们定义的one,two,three三个枚举属性,在这里也看到了,分别定义为Test类型。

2022-09-27 15:18:35 388

原创 Android:ChildHelper的Bucket

RecyclerView,Bucket,位运算

2022-09-20 15:32:41 144

原创 Android:RecyclerView的ChildHelper

RecyclerView作为我们常用的数据列表展示组件,它可以包含若干的子视图(child),那就会涉及到添加、删除、隐藏、查找等等操作,所以Android SDK提供了一个专门负责管理RecyclerView子视图的类,就是ChildHelper类。今天我们就来看看ChildHelper的源码实现。它的官方说明如下:大概的意思就是说,ChildHelper是用来管理子视图的,它包含一对子视图的操作功能。

2022-09-19 09:51:27 621

原创 Dialog and WindowManager$BadTokenException

在Android的开发中,Dialog的使用已经非常的频繁,在使用过程中,我们需要留意一些细节,不然就会导致诸如下面的错误发生。那今天我们就来分析一下,在开发中,导致这种错误的常见的操作。Dialog的创建需要一个上下文Context,内部需要根据这个Context创建一个PhoneWindow。当我们在一个Activity中使用Dialog时,Context通常就是所属的这个Activity对象。如果报错,也就是这个Activity上下文出现了问题。你要保证Activity是正常活动状态才行。

2022-07-04 14:43:35 615

原创 supportRequestWindowFeature(AppCompatActivity)

AppCompatActivity,标题栏,Actvity

2022-06-02 09:21:58 475

原创 Android项目中嵌入Cocos游戏项目

Cocos的生态相比Unity要逊色很多,网上搜索的各种文章,基本都是比较早期的,无法在较新版本环境中使用,这里以Cocos 3.3版本为例,讲一下在自己的Android项目中嵌入Cocos项目。一、创建Cocos项目(略)。二、编译Cocos Android工程。需要下载NDK。在偏好设置中,设置路径。Cocos菜单中选择“项目——构建发布”,弹出如下界面。我已经创建了一个名字为android的构建任务,大家可以新建一个。“build”是 工程构建的目录,“..

2022-03-23 14:18:59 10715 2

原创 Java:ArrayBlockingQueue

ArrayBlockingQueue是一个有界队列,执行先进先出(FIFO)原则,它是固定大小的,一旦创建,容量就不能被修改。先对部分属性和方法进行简单说明。属性items 内部保存对象的数组,这个数组创建后,大小就不会改变了,即使添加和取出元素,都不会影响数组大小,只不过对应位置会被改写 takeIndex 下一个被检索的元素的索引,初始为0,每取出一个元素,+1 putIndex 下一个被添加的元素的索引,初始为0,每添加一个元素,+1 count 队列的数量

2021-12-16 14:37:29 1308

原创 Java:ThreadPoolExecutor中的Worker

在文章《从源码看ThreadPoolExecutor的执行步骤》中已经讲过了ThreadPoolExecutor的执行步骤,里面提到了一个内部类Worker,它就是负责具体执行任务的,今天就来说说它。private final class Worker extends AbstractQueuedSynchronizer implements Runnable{ //worker的工作线程,如果创建失败则为null final Thread thread;

2021-12-14 09:45:51 337

原创 Java:从源码看ThreadPoolExecutor的执行步骤

提起线程,几乎每个人都知道,但是真正使用线程的确实不多。线程让许多人感到畏惧。在平时的工作中,使用线程,很多时候就是new一个Thread去start,当看到线程池ThreadPoolExecutor创建时的一堆参数,更是一头雾水。接下来的内容,我们就从源码看看ThreadPoolExecutor的工作流程,让你感到其实它很友好????。先看一张ThreadPoolExecutor的工作步骤图。我们来创建一个线程池的执行代码。int taskCount = 41;AtomicInte

2021-12-13 16:22:45 469

原创 Android:从源码看onSaveInstanceState的调用条件

Called to retrieve per-instance state from an activity before being killed so that the state can be restored in onCreate or onRestoreInstanceState (the Bundle populated by this method will be passed to both).This method is called before an activity may ..

2021-12-08 10:44:09 131

原创 Android:Instrumentation

先看一下官方的对Instrumentation的说明:Base class for implementing application instrumentation code. When running with instrumentation turned on, this class will be instantiated for you before any of the application code, allowing you to monitor all of the interact

2021-12-07 09:26:21 2806

ProtocolBuffer for java(android)

ProtocolBuffer的exe,源码,及maven

2014-12-12

C#仿Windows可折叠导航栏

C#仿Windows可折叠导航栏,支持小图标

2012-05-09

Delphi实现全局鼠标钩子

Delphi实现全局鼠标钩子 Delphi实现全局鼠标钩子

2010-09-16

API实现socket通信示例

socket的基本应用,针对初学者,老鸟们可以掠过。本示例采用Delphi2010编写

2010-09-01

windows用户基本设置

利用微软的ADSI(活动目录接口)设置windows用户及用户隶属于设置 原始代码来自网络,这里做了一些改动

2009-07-04

SPCOMM2.5修正版

SPCOMM2.5修正版SPCOMM2.5修正版

2009-05-22

delphi网络文件传输demo

delphi网络文件传输demo delphi网络文件传输demo

2009-03-20

汇编语言教程(chm)

汇编语言教程 汇编语言教程 汇编语言教程

2009-03-13

DELPHI全掌握(chm格式)

DELPHI全掌握 DELPHI全掌握 DELPHI全掌握

2009-03-10

ReportMachine2.6正式版本

ReportMachine2.6正式版本 ReportMachine2.6正式版本

2009-03-10

RegExpr,正则表达式

RegExpr,正则表达式,正则 RegExpr,正则表达式,正则

2009-03-10

delphi网络应用

delphi网络应用 用delphi解决网络问题

2009-01-12

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除