Java & Android 某些易忘知识点

本文深入探讨Android开发中的关键概念,包括作用域、TypeArray使用、条件运算符区别、消息处理机制、反射机制、断言使用、尺寸单位转换、aar依赖添加、屏幕尺寸获取、ConstraintLayout性能优势及方向偏移属性详解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 作用域范围

@SuppressWarnings:抑制警告
TypeArray:context通过调用obtainStyledAttributes方法来获取一个TypeArray,然后由该TypeArray来对属性进行设置,obtainStyledAttributes方法有三个,我们最常用的是有一个参数的obtainStyledAttributes(int[] attrs),其参数直接styleable中获得,调用结束后务必调用recycle()方法,否则这次的设定会对下次的使用造成影响  
&与 &&:
电路问题总结:
对于:&   -- >  不管怎样,都会执行"&"符号左右两边的程序
对于:&& -- >  只有当符号"&&"左边程序为真(true)后,才会执行符号"&&"右边的程序
下面来说说运算规则:
对于:&  -- >  只要左右两边有一个为false,则为false;只有全部都为true的时候,结果为true
对于:&& -- > 只要符号左边为false,则结果为false;当左边为true,同时右边也为true,则结果为true
1、sendEmptyMessage与sendMessage的区别:
sendMessage()允许你处理Message对象(Message里可以包含数据,)
sendEmptyMessage(int what)只能放数据。其中参数what作用:就类似于ID,处理消息的时候用于区分你send一个0和1,处理的时候就要判断了if(msg.what == 0){}else if(msg.what == 1){}
2、sendMessageAtTime()与sendEmptyMessageDelay()的区别:
这两句是等效的,都是延时1秒将消息加入列队
msgHandle.sendMessageAtTime(msg, SystemClock.uptimeMillis()+1000);
msgHandle.sendMessageDelayed(msg, 1000)
sendMessageAtTime的uptimeMillis是相对系统开机时间的绝对时间,SystemClock.uptimeMillis()是当前开机时间

反射:
1.获取某个正在运行的类的方法
Method method = 类名.getClass().getMethod(方法名,参数1,参数2,...); 或者 Method method = Class.forName(完整类名).getMethod(方法名,参数1,参数2,...);
获取完整类名:类名.class.getName()
2.执行该方法
Boolean b = 获取的方法实例method.invoke(类名,参数1,参数2,...)

断言:
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。
2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

getDimension()、getDimensionPixelSize()、getDimenPixelOffset()
相同点:结果值都是将资源文件中定义的dip值乘以屏幕密度
不同点:
getDimension():返回的是float,
getDimensionPixelSize():返回的是int, 返回的是实际数值的四舍五入
getDimenPixelOffset():返回的是int, 返回的是实际数值去掉后面的小数点

添加aar依赖:在build.gradle中的android闭包的repositories{}中添加flatDir{ dirs 'libs'  //aar目录},然后在dependencies{}中添加依赖
compile(name: 'aar_name', ext: 'aar'),再将aar文件复制到aap/libs目录下

Android DisplayMetrics类获取屏幕大小:
https://www.cnblogs.com/feng-ye/p/5923019.html

 

解析ConstraintLayout的性能优势:https://mp.weixin.qq.com/s/gGR2itbY7hh9fo61SxaMQQ

MarginStart , MarginLeft ,MarginEnd ,MarginRight:https://blog.youkuaiyun.com/zhufuing/article/details/40181815
根据api注释,我们得知MarginStart指的是控件距离开头View部分的间距大小,MarginLeft则指的是控件距离左边View部分的间距大小,MarginEnd和MarginRight同理。
一般情况下,View开始部分就是左边,但是有的语言目前为止还是按照从右往左的顺序来书写的,例如阿拉伯语,在Android  4.2系统之后,Google在Android中引入了RTL布局,更好了支持了由右到左文字布局的显示,为了更好的兼容RTL布局,google推荐使用MarginStart和MarginEnd来替代MarginLeft和MarginRight,这样应用可以在正常的屏幕和由右到左显示文字的屏幕上都保持一致的用户体验。

dp = (width in pixels * 160) / screen density

获取屏幕分辨率:adb shell wm size

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值