Android
赵小玉的小太阳
简单生活造就美丽人生~
展开
-
Android:getMethod()、getDeclaredMethod()区别
在写一个通用点击事件绑定时,使用getDeclaredMethod方法遇到一个问题:java.lang.NoSuchMethodException: findViewById [int]通过getDeclaredMethod反射“findViewById”方法时提示找不到该方法,最后使用getMethod()完成调用。原因:setContentView()是父类的方法,所以只能通过getMethod()访问。区别:getMethod方法只能获取public方法并且包括父类或者接口。 .原创 2022-02-17 15:43:25 · 2085 阅读 · 0 评论 -
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 · 2161 阅读 · 0 评论 -
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 · 529 阅读 · 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 · 4878 阅读 · 0 评论 -
kotlin中参数判空时的区别
kotlin中参数判空时!!. 和?. 的区别!!. 可以理解为是“硬”判断,如果参数是空的就抛出异常?.可以理解为是“软”判断,如果参数为空还让程序继续运行(类似于添加了一个判空后的处理:如果参数为空就跳过这个逻辑执行下一行)...原创 2021-11-15 14:40:39 · 2019 阅读 · 0 评论 -
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 · 2346 阅读 · 0 评论 -
Fragment +NestedScrollView切换时会造成自动滑动的现象
在Fragment中使用NestedScrollView嵌套RecyclerView时,如果来回切换Fragment就可能会造成界面直接滑动到Recyclerview的第一个Item。解决方案:在NestedScrollView的第一个父布局中添加如下属性,强制获得焦点android:descendantFocusability="blocksDescendants"android:focusable="true"android:focusableInTouchMode="true"..原创 2021-10-02 17:18:24 · 788 阅读 · 0 评论 -
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 · 93 阅读 · 0 评论 -
RecyclerView+CardView Item点击事件失效
在RecyclerView中使用了CardView作为其条目时,如果发现点击事件失效,点击了item没有反应或者点击item之间的间隔出发点击事件。解决方法:1、如果是点击任何地方都没有触发点击事件,首先确认一下是否注册了监听。2、如果确认注册了相关监听,检查CardView中是否设置了该属性,如果有,则移除。android:clickable="true"...原创 2021-08-28 08:02:25 · 1068 阅读 · 0 评论 -
使用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 · 155 阅读 · 0 评论 -
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 · 1171 阅读 · 0 评论 -
Java关于静态块、代码块、执行顺序
静态块:JVM加载时只执行一次构造块:类种直接使用{}定义,每一次创建对象时,执行执行顺序优先级:静态块->main()->构造块->构造方法()原创 2021-08-18 19:37:56 · 79 阅读 · 0 评论 -
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 · 293 阅读 · 0 评论 -
Android Studio修改代码后不生效解决方案
近期,在使用Android Studio的过程中遇到了一个修改代码后,编译不生效的问题。在自助终端上运行Android程序时,修改了代码,但是程序一直报错。debug时断点也是跳来跳去的,当时也想到了是Android Studio的问题,于是清缓存并重启了Studio,并不好使。最后重启电脑才解决了问题。靠谱方案: 第一种方案:更改gradle的默认缓存策略: configurations.all{ resolutionStrategy{ ...原创 2021-07-20 08:46:01 · 1775 阅读 · 2 评论 -
Android平板对接硬件设备时的消息处理
由于业务的扩展,需要对接新的设备,此时Android应用服务层需要兼容不同的指令。所有消息交互都采用同一个串口通道所以所有的交互都是同步的,如果消息交互时间长短不同、顺序不同,就可能会造成命令交互的混乱,导致发送和接受的交互序列不能很好的对应起来。为了解决上述问题,采用命令序号+超时的机制去处理。每次发送数据前都要对此条数据添加命令序号,或者是能对此条指令做特殊标识的标记,注意如果有的指令需要通过异步的方式去下发则需要单独开一个线程去发送,如果发送此异步指令时又接着下发了一条新的指令,则需要去添加一个原创 2021-07-03 16:24:48 · 175 阅读 · 1 评论 -
自己动手来封装一个线程池吧
之前做过一个需求是要求实时读取机房内每个天线所读的档案信息,这显然不能用串行的方式来做,并且用户的要求是再及时毫秒内相应完毕,也就是说一定要做到足够的快,让客户直观的感受到“快”到飞起~我们应该采用多任务的方式让程序尽可能多的读取天线信息。这里我们可以采用线程池来让更多的任务执行起来。...原创 2020-09-22 22:05:20 · 496 阅读 · 0 评论 -
基于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 · 869 阅读 · 1 评论 -
Handler机制工作流程源码分析(通俗易懂)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、Handler 二、使用步骤 1.引入库 2.读入数据 总结前言由于在Android的UI操作不是线程安全的,所以Android的UI操作必须在主线程中进行, 因此我们把耗时操作放在子线程中进行(例如在子线程中更新UI时,如果主线程也在对这个UI进行更新操作,就会导致线程不安全),因为Android的主线程不能进行长时间的耗时操作,因此我们要把耗时操作放到子线程中去,当耗时任务完..原创 2020-09-18 00:31:41 · 760 阅读 · 2 评论 -
Android的View初探(一)
Android View的事件初探Android中的View体系十分重要。View的基础知识功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Android中的View体系十分重要。Android中的view虽然不属于四大组件,但原创 2020-09-16 22:49:07 · 176 阅读 · 0 评论