自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 Android中使用Java简单模拟kotlin中的协程

kotlin协程切换线程在编码过程中非常简单高效,在Java中简单模拟一下首先定义一个注解,用来作为线程切换的标记@Retention(RetentionPolicy.SOURCE)@IntDef({Dispatcher.IO, Dispatcher.Main})public @interface Dispatcher { int IO = 0; int Main = 1;}接着构建一个"协程"类:其中主要由线程池以及Handler构成public clas

2022-05-20 15:16:20 1205 1

原创 Android:getMethod()、getDeclaredMethod()区别

在写一个通用点击事件绑定时,使用getDeclaredMethod方法遇到一个问题:java.lang.NoSuchMethodException: findViewById [int]通过getDeclaredMethod反射“findViewById”方法时提示找不到该方法,最后使用getMethod()完成调用。原因:setContentView()是父类的方法,所以只能通过getMethod()访问。区别:getMethod方法只能获取public方法并且包括父类或者接口。 .

2022-02-17 15:43:25 2243

原创 kotlin解构

kotlin解构指的是将对象的多个属性分别赋值给多个变量的过程class Student(val id: Int, val name: String, val sex: Char) { //其中的固定格式为 operator fun component[num],其中component为固定写法不能改变 operator fun component1(): Int = id operator fun component2(): String = name opera

2022-01-04 22:21:48 2294

原创 BottomNavigationView长按弹出Toast

/** * 移除长按点击弹出Toast */fun BottomNavigationView.removeLongTouchToast() { val bottomNavigationMenuView = this.getChildAt(0) as ViewGroup val size = bottomNavigationMenuView.childCount for (index in 0 until size) { bottomNavigationMenu.

2021-12-29 15:27:18 615 1

原创 Kotlin回调函数Debug失败解决方案

kotlin如果使用拉姆达表达式进行回调函数的处理debug时将会产生'this@LoginActivity' is not captured此时应将lambda表达式展开binding.btnLogin.setOnClickListener(object :View.OnClickListener{ override fun onClick(v: View?) { TODO("Not yet implemented") } })...

2021-12-12 16:34:59 5205

原创 kotlin中参数判空时的区别

kotlin中参数判空时!!. 和?. 的区别!!. 可以理解为是“硬”判断,如果参数是空的就抛出异常?.可以理解为是“软”判断,如果参数为空还让程序继续运行(类似于添加了一个判空后的处理:如果参数为空就跳过这个逻辑执行下一行)...

2021-11-15 14:40:39 2098

原创 Glide超时重试机制实现

1、使用官方提供的api实现Glide.error(),弊端:递归调用会出现无限调用的情况。2、(1)设置监听器 Glide.listener(new RequestListener<Drawable>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target,boo

2021-10-13 11:09:45 2938

原创 Fragment +NestedScrollView切换时会造成自动滑动的现象

在Fragment中使用NestedScrollView嵌套RecyclerView时,如果来回切换Fragment就可能会造成界面直接滑动到Recyclerview的第一个Item。解决方案:在NestedScrollView的第一个父布局中添加如下属性,强制获得焦点android:descendantFocusability="blocksDescendants"android:focusable="true"android:focusableInTouchMode="true"..

2021-10-02 17:18:24 882

原创 Android低成本屏幕适配

通过修改一次density达到全局适配效果/** * 屏幕适配 * @param activity */ public static void screenAdapt(Activity activity) { DisplayMetrics dm = activity.getResources().getDisplayMetrics(); float targetDensity = (float) (dm.widthPixels /

2021-09-16 09:38:24 148

原创 RecyclerView+CardView Item点击事件失效

在RecyclerView中使用了CardView作为其条目时,如果发现点击事件失效,点击了item没有反应或者点击item之间的间隔出发点击事件。解决方法:1、如果是点击任何地方都没有触发点击事件,首先确认一下是否注册了监听。2、如果确认注册了相关监听,检查CardView中是否设置了该属性,如果有,则移除。android:clickable="true"...

2021-08-28 08:02:25 1221

原创 使用Handler时注意内存泄漏

如果Handler没有管理好,很容易造成内存泄漏的问题。最好使用静态内部类 + 弱引用,并且在 Activity 退出时移除消息。 private MyHandler myHandler; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.l

2021-08-21 10:34:22 214

原创 Android实现按下返回键时不进行Activity销毁从而回退到桌面

如题: 用户按返回按钮不关闭页面,而是返回到系统桌面。相当于按下home键。 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent home = new Intent(Intent.ACTION_MAIN); home.setFlags(I...

2021-08-21 07:56:10 1527

原创 Java关于静态块、代码块、执行顺序

静态块:JVM加载时只执行一次构造块:类种直接使用{}定义,每一次创建对象时,执行执行顺序优先级:静态块->main()->构造块->构造方法()

2021-08-18 19:37:56 120

原创 AIDL远程调用问题 java.lang.SecurityException: Binder invocation to an incorrect interface

最近模仿支付宝支付时使用了AIDL进行跨进程调用。过程中出现了远程调用失败的问题。java.lang.SecurityException: Binder invocation to an incorrect interface仔细查看了一下:服务端与客户端的AIDL包名没有保持一致,因此需要将包名修改成一样的就咳可以了。注意:AIDL文件要完全一致,包名也要完全一致![服务端]-----------------------------------------------------.

2021-07-20 08:57:41 400

原创 Android Studio修改代码后不生效解决方案

近期,在使用Android Studio的过程中遇到了一个修改代码后,编译不生效的问题。在自助终端上运行Android程序时,修改了代码,但是程序一直报错。debug时断点也是跳来跳去的,当时也想到了是Android Studio的问题,于是清缓存并重启了Studio,并不好使。最后重启电脑才解决了问题。靠谱方案: 第一种方案:更改gradle的默认缓存策略: configurations.all{ resolutionStrategy{ ...

2021-07-20 08:46:01 2090 2

原创 Android平板对接硬件设备时的消息处理

由于业务的扩展,需要对接新的设备,此时Android应用服务层需要兼容不同的指令。所有消息交互都采用同一个串口通道所以所有的交互都是同步的,如果消息交互时间长短不同、顺序不同,就可能会造成命令交互的混乱,导致发送和接受的交互序列不能很好的对应起来。为了解决上述问题,采用命令序号+超时的机制去处理。每次发送数据前都要对此条数据添加命令序号,或者是能对此条指令做特殊标识的标记,注意如果有的指令需要通过异步的方式去下发则需要单独开一个线程去发送,如果发送此异步指令时又接着下发了一条新的指令,则需要去添加一个

2021-07-03 16:24:48 280 1

原创 自己动手来封装一个线程池吧

之前做过一个需求是要求实时读取机房内每个天线所读的档案信息,这显然不能用串行的方式来做,并且用户的要求是再及时毫秒内相应完毕,也就是说一定要做到足够的快,让客户直观的感受到“快”到飞起~我们应该采用多任务的方式让程序尽可能多的读取天线信息。这里我们可以采用线程池来让更多的任务执行起来。...

2020-09-22 22:05:20 577

原创 自己动手实现一个简易的ButterKnife(简单快捷)

相信大家都使用过ButterKnife这个专注于Android的view注入的框架,这个框架用起来是非常的省心省力,去除了大量的"findViewById(resId);"操作,令我们写的代码简化了许多。 其实我们也可以自己动手封装一个相似功能的简易框架,来实现view的绑定和点击事件的处理。 首先我们需要运用到注解和反射的相关知识。 1、定义一个自定义注解 认识一下几个用到的注解:@Target - 标记这个注解应该是哪种 Java ...

2020-09-20 23:18:38 245

原创 基于Tcp协议的Socket的简单封装

基于Tcp协议的Socket的简单封装近期公司买了新的Android板子作用在自助借还机上,该设备内部集成了若干个天线,采用tcp协议与Android主板进行通讯,因此需要对socket的应用做一个简单的封装。简单了解一下Socket1、首先shocket不是一种协议,而是一个程序调用的接口API,属于传输层。2、通过使用Socket,可以在Android中应用TCP/IP协议。3、用户只需要调用Socket去整理数据、组织数据来达到符合指定的协议,就可以达到通讯。Android建立Socket

2020-09-18 14:24:58 1007 1

原创 Handler机制工作流程源码分析(通俗易懂)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、Handler 二、使用步骤 1.引入库 2.读入数据 总结前言由于在Android的UI操作不是线程安全的,所以Android的UI操作必须在主线程中进行, 因此我们把耗时操作放在子线程中进行(例如在子线程中更新UI时,如果主线程也在对这个UI进行更新操作,就会导致线程不安全),因为Android的主线程不能进行长时间的耗时操作,因此我们要把耗时操作放到子线程中去,当耗时任务完..

2020-09-18 00:31:41 877 2

原创 Android的View初探(一)

Android View的事件初探Android中的View体系十分重要。View的基础知识功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Android中的View体系十分重要。Android中的view虽然不属于四大组件,但

2020-09-16 22:49:07 258

空空如也

空空如也

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

TA关注的人

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