四个有用的Android开发技巧

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 首先height属性一定要调整为wrap_content保证最后TextView按钮的高度的测量最终取minHeight设置的属性值和背景设置的高度这两者的最大值
  2. 其次还要设置minHeight最小高度属性,注意一定要比背景设置的高度值大,保证能和屏幕顶部产生边距效果;
  3. 最后要设置字体的位置为垂直居中,保证字体位置和背景不发生错位

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

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

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

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

日志过滤start u0,可以看到每次跳转的Activity信息

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

这里我们演示下效果:

1. 跳转到Google浏览器

logcat界面会输出:

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

2. 跳转到系统设置界面

logcat输出:

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言聊天室demo

Go语言聊天室demo 话不多说直接上代码 话不多说直接上代码 Tcp服务端 package mainimport ("container/list""encoding/json""fmt"uuid "github.com/satori/go.uuid""net""strings" )type GlobalConnInfo struc…

13年测试老鸟,接口性能测试-压测总结汇总,一文概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、概述 性能测试…

如何禁止员工在上班时间利用电脑打游戏逛娱乐网站?

在现代化的工作环境中&#xff0c;电脑已成为员工日常工作的必需品。然而&#xff0c;一些员工可能在上班时间利用电脑进行非工作相关的活动&#xff0c;如打游戏或浏览娱乐网站。这不仅影响个人的工作效率&#xff0c;也可能对团队的整体绩效和公司的文化产生负面影响。因此&a…

python界面开发 - Radiobutton:单选按钮

文章目录 1. python图形界面开发1.1. Python图形界面开发——Tkinter1.2. Python图形界面开发——PyQt1.3. Python图形界面开发——wxPython1.4. Python图形界面开发—— PyGTK&#xff1a;基于GTK1.5. Python图形界面开发—— Kivy1.6. Python图形界面开发——可视化工具1.7. …

前端工程部署步骤小记

安装mqtt: “mqtt”: “^4.3.7”, npm install git panjiacheng 后台demo下载zip 1、npm install --registryhttps://registry.npmmirror.com 2、npm run dev 前端demo创建 1、安装npm 2、npm install vuenext 3、npm install -g vue/cli 查看版本 vue --version 4、更新插件…

【Linux C | 网络编程】多播的概念、多播地址、UDP实现多播的C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

如何选择适合您需求的虚拟主机服务

随着互联网的发展&#xff0c;虚拟主机服务在网站托管领域扮演着至关重要的角色。我们在前几天遇到客户咨询如何在Hostease服务商选择适合的主机服务。本文将介绍如何选择适合您需求的虚拟主机服务&#xff0c;以确保您的网站或应用程序能够稳定运行并获得最佳性能。 确定您的需…

vscode的c++开发环境配置

主要是安装一些插件&#xff0c;c/c开发常用的插件有如下几个&#xff1a; 插件名称功能C/CC 和 C的编译环境C/C SnippetsC/C重用代码块C/C Advanced LintC/C静态检测Code Runner代码运行Include AutoComplete自动头文件包含Rainbow Brackets彩虹花括号&#xff0c;有助于阅读…

常见的验证码

一、短信验证码 前端&#xff1a; 用户填写手机号&#xff0c;点击按钮发送请求用户短信得到验证码后&#xff0c;用户填写表单提交 form 表单&#xff0c;进行验证 后台&#xff1a; 随机生成几位验证码并将生成时间、手机号、验证码存储起来&#xff0c;可以存到session、…

小游戏加固方案已全面适配微信、QQ、抖音、快手、美团、华为、支付宝渠道

2023年&#xff0c;国内移动游戏收入与游戏用户规模双双创下历史新高。其中小游戏异军突起&#xff0c;市场规模达到200亿元&#xff0c;同比增长300%&#xff0c;成了万众瞩目的行业新风口。 小游戏的高速发展带来了更多的活力&#xff0c;产出了多款月流水过亿的热门游戏。行…

Linux下Qt程序打包发布

如何打包 注意事项 可能遇到的问题 如何打包&#xff1a; 1、先下载linuxdeployqt工具&#xff0c;下载链接&#xff1a;https://github.com/probonopd/linuxdeployqt/releases 选择最后release的版本&#xff0c;然后执行命令&#xff1a; sudo chmod 777 linuxdepl…

webpack编译报错Cannot find module ‘@babel/core‘且无法识别es6的reset语法

~ npm install babel-core babel-loader --save-dev 用了这个指令后webpack报错 尝试重新下载了babel-core babel-loader 还是不行 Cannot find module babel/core babel-loader8 requires Babel 7.x (the package babel/core). If youd like to use Babel 6.x (babel-core), …

Gson(List<Object>转String 、String转List<Object>)

要在Java项目中使用Gson库&#xff0c;你需要添加相应的依赖项。以下是在Maven项目的pom.xml文件中添加Gson依赖的示例&#xff1a; <dependencies><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId>&l…

Matter 笔记1-环境准备,编译

不要远程登录Ubuntu输入以下命令&#xff0c;原因&#xff1a;ubuntu/linux上的http代理设置 1. 准备 1.1 工具 Ubuntu 22.04 LTSClash 里General的端口设置到ubuntu 的网络设置里 1.2 代码 这里使用芯科整理过的代码 git clone https://github.com/SiliconLabs/matter.…

3. springboot中集成部署vue3

1. vue3构建 构建命令 npm run build&#xff0c; 构建的结果在disc目录&#xff1a; 2. springboot集成 2.1 拷贝vue3构建结果到springboot resources/static目录 2.2 springboot pom依赖 添加thymeleaf依赖 <dependency><groupId>org.springframework.boot</…

Rust错误处理和Result枚举类异常错误传递

Rust 有一套独特的处理异常情况的机制&#xff0c;它并不像其它语言中的 try 机制那样简单。 首先&#xff0c;程序中一般会出现两种错误&#xff1a;可恢复错误和不可恢复错误。 可恢复错误的典型案例是文件访问错误&#xff0c;如果访问一个文件失败&#xff0c;有可能是因…

机器学习模型—线性回归

文章目录 机器学习模型—线性回归线性回归模型的假设线性回归简单线性回归多元线性回归多元线性回归实现多项式回归多项式回归的实现线性回归二阶函数回归三阶函数回归总结机器学习模型—线性回归 线性回归是一种统计方法,用于对因变量与给定的一组自变量之间的关系进行建模。…

乔琼:高性能会议传声器的产品优化设计| 演讲嘉宾公布

一、智能家居与会议系统 智能家居与会议系统分论坛将于3月28日同期举办&#xff01; 智能会议系统它通过先进的技术手段&#xff0c;提高了会议效率&#xff0c;降低了沟通成本&#xff0c;提升了参会者的会议体验。对于现代企业、政府机构和学术界是不可或缺的。在这里&#x…

arm系统构建的基础知识

目录 一、环境变量 二、归档和压缩 (一) 常用命令 (二) 常用参数 三、磁盘分区和挂载 四、网络管理 一、环境变量 显示环境变量 —— echo设置临时环境变量 —— exportecho $PATH —— 显示当前PATH环境变量 在当前目录下&#xff0c;编写一个hello.c 编译并运行。 图…

有哪些搭建代理服务器的好方法?--代理IP小课堂

在互联网技术日益成熟的今天&#xff0c;代理服务器在提升网络安全性、提高访问速度以及数据抓取等方面发挥着越来越重要的作用。无论是大型企业还是个人用户&#xff0c;都可能会考虑搭建自己的代理服务器来满足特定的网络需求。今天我们就来说一说&#xff0c;要如何搭建代理…