四个有用的Android开发技巧,又来了

本文分享了Android开发中的实用技巧,包括通过堆栈快速识别系统版本(如Android10+和Android12+)、使用自定义背景实现按钮间距、通过logcat过滤查看启动Activity信息以及优化gradle配置以提高项目打开速度。
摘要由CSDN通过智能技术生成

大家好,本篇文章会继续给大家分享一些Android常见的开发技巧,希望能对读者有所帮助。

作者:长安皈故里 链接:https://juejin.cn/post/7250080519069007933

一. 通过堆栈快速定位系统版本

这个地方主要分享大家两个个技巧,通过问题堆栈简快速定位当前系统版本:

1. 快速区分当前系统版本是Android10以下,还是Android10及以上;

首先Android10及以上引入了一个新的服务Service:ActivityTaskManagerService,将原本ActivityMangerService原本负责的一些职能拆分给了前者,所以当你的问题堆栈中出现了ActivityTaskManagerService相关的字眼,那肯定是Android10及以上了

3cfb0671672ffeaee02ce325f5a5d2c2.jpeg

大家在Android9及以下的源码中是找不到这个类的。

2. 快速区分当前系统版本是Android12以下,还是Android12及以上;

这个就得借助Looper了,给大家看下Android12上Looper的源码:

925bf44bbf2a48f20a090b2fe03d87ae.jpeg

Looper分发消息的核心方法loop(),现在会转发给loopOnce()进行处理,这个可是Android12及以上特有的,而Looper又是Android处理消息必要的一环,是咱们问题堆栈的源头祖宗,类似于下面的:

0c2a3135c5bee3c53063183114d6ec73.jpeg

所以这个技巧相信还是非常有必要的:当你从问题堆栈中一看有loopOnce() 这个方法,那必定是Android12无疑了。

二. 实现按钮间距的一种奇特方式

最近看了一个新的项目代码,发现该项目实现按钮之间、按钮与顶部底部之间间距实现了,用了一种我之前没了解过的方式,于是这里分享给大家瞧瞧。

这里就以TextView和屏幕顶部间设置间距为例,初始的效果如下:

dc44fad91a94e41e86b96c58d0e50373.jpeg

接下来我们来进行一步步改造:

1. 首先TextView是有一个自定义的xml背景:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:height="70dp"
        android:gravity="center_vertical">
        <shape>
            <solid android:color="#ff0000" />
        </shape>
    </item>
</layer-list>

核心就是定义了android:heightandroid:gravity这两个属性,来确保我们自定义背景在组件中的高度及居中位置。

2. 其次将布局中TextView的属性调整下:

742aa3952405e82040922777f42962d7.jpeg

  1. 首先height属性一定要调整为wrap_content保证最后TextView按钮的高度的测量最终取minHeight设置的属性值和背景设置的高度这两者的最大值

  1. 其次还要设置minHeight最小高度属性,注意一定要比背景设置的高度值大,保证能和屏幕顶部产生边距效果;

  1. 最后要设置字体的位置为垂直居中,保证字体位置和背景不发生错位

经过上面处理,效果就出来了:

3954c4d27adbe644013c78d36b5c2b0e.jpeg

其实上下空白的部分都是属于TextView,设置点击事件也会被响应,这算是其中的缺点之一,当前也可能在业务场景中认为这是一种合理表现。

上面实现的逻辑和TextView的测量逻辑密不可分,感兴趣的同学可以看下这块代码,这里就不带大家进行一一分析了:

21ed778704697e13a47dcd356f867605.jpeg

三. logcat快速查看当前跳转的Activity类信息

忘了是在哪里看到的了,只要日志过滤start u0,就可以看到每次跳转的Activity信息,非常的有帮助,既不需要改动业务层,也不需要麻烦的安装一些插件啥的。

使用时记得将logcat右边的过滤条件置为,否则你就只能在左边切换到系统进程去看了:068b3118fd9b78a946ffdc41638f4e7c.jpeg

这里我们演示下效果:

1. 跳转到Google浏览器

6e95d4aef5366db838d630139aaa25c6.jpeg

logcat界面会输出:

0580a09dce2aecb5ce8eb166e9cafa89.jpeg

会打印一些跳转到包名类名等相关信息。

2. 跳转到系统设置界面

5e9dee062805ce7c6909c25ffa86c5f5.jpeg

logcat输出:

d3d6ed851d33a1737c7d686d1ef21f99.jpeg

可以说start u0还是相当好用的。

四. 项目gradle配置最好指向同一本地路径

最近开发中经常存在需要一次性检索多个项目的场景,而这样项目的gradle版本都是相同的,没啥区别。但每打开一个项目就得重新走一遍gradle下载流程,下载速度又是蜗牛一样的慢。

所以强烈建议大家,本地提前准备好几个gradle版本,然后通过设置将项目的gradle指向本地已存在好的gradle:

19d4f42d45fc6d460a864b5d49ee2613.jpeg

这样项目第一次打开的速度将是非常快的,而且按道理来说相同gradle版本的项目指向同一本地路径,也可以实现缓存共享。猜的

如果项目好好的编译运行着,突然没网了,可能会提示一些找不到依赖库资源啥的,其实你本地都已经缓存好依赖库资源了,只需要设置下off-mode,不走网络直接通过本地资源编译运行即可

2928a695cf2fae5a2a667fad56c0b320.jpeg

总结

本篇文章主要是介绍了Android开发一些技巧,感觉都是项目中挺常用到的,算是我最近一个月收获的吧,后续准备研究研究compose了,毕竟看到大家们都在搞这个,羡慕的口水都流了一地了哈哈。

关注我获取更多知识或者投稿

fe4fb4130b8bfddb7bb262ec3152a943.jpeg

9a4edb434c657fc320ba7062d970b870.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值