Android面试题整理 持续更新中

本文详细梳理了Android面试中的常见问题,涵盖了Window数量、Context的理解、Gson混淆注意事项、View高度获取、View大小确定、Intent数据传递限制、内部类区别、HTTP相关面试题等内容,旨在帮助Android开发者全面复习面试必备知识。
摘要由CSDN通过智能技术生成

一.一个应用有几个window

Activity+Dialog +Toast+PopupWindow 个数

解释:View不能单独存在,它必须附着在Window这个抽象的概念上面,因此有视图的地方就有 Window。Android有视图的地方有 Activity、Dialog、Toast、PopUpWindow等,它们都对应着一个Window。这也是面试中常问到的一个知识点,一个应用中有多少个Window?确切的说只有一个Widow,只不过这些的window的创建过程有的相似,有的不同罢了!

 

二.一个应用有几个Context

Activity+Service+1(Application)个数

 

三使用GSON混淆的时候应注意些什么?

Gson的混淆里面要对Gson解析的  自己写的 bean 进行混淆保护。要不然Gson不识别混淆后的代码,会出现解析失败,bean为NULL,报 java.lang.NullPointerException 空指针异常。

去掉  自己写的bean包 下的所有.class文件不进行混淆编译 

对Gson解析bean类,进行保护。-keepclass com.xxx.xxx.bean.** {*;}

 

四、View.getheight()和view.getMeasureHeight()的区别

1、getMeasuredHeight()返回的是原始测量高度,与屏幕无关,getHeight()返回的是在屏幕上显示的高度。实际上在当屏幕可以包裹内容的时候,他们的值是相等的,只有当view超出屏幕后,才能看出他们的区别。当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的高度。

2、getMeasuredHeight()方法就是在onMeasure()测量后调用,因此你要在oncreate()方法中去获取某个view的高度,需要人为去通知系统帮你测量,

final View headerView = LayoutInflater.from(this).inflate(R.layout.layout_header, null);

headerView.measure(0, 0);//主动通知系统去测headerView的高度

int measuredHeight = headerView.getMeasuredHeight();

getHeight()方法是在OnLayout()方法被调用才会执行

eaderView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

int measuredHeight = headerView.getMeasuredHeight();

headerView.getViewTreeObserver()

                .removeGlobalOnLayoutListener(this);//一定要移除,因为onLayout()会执行多次,如果不移除的话 也会被回调多次,而且值还不一样

}

});

五、Android中View大小的确定(测量模式)

转:https://www.jianshu.com/p/1b917f9a49a9

 

 

六、Intent传递数据的大小限制是多少

传 512K 以下的数据的数据可以正常传递。

传 512K~1024K 的数据会出错,闪退。

传 1024K 以上的数据会报错:TransactionTooLargeException

考虑到 Intent 还包括要启动的 Activity 等信息,实际可以传的数据略小于 512K

七、静态内部类和非静态内部类的区别

非静态内部类:

1、变量和方法不能声明为静态的。(类的编译顺序:外部类--静态方法或属性--内部类,如果内部类声明为静态的,造成编译顺序冲突。个人理解)

2、实例化的时候需要依附在外部类上面。比如:B是A的非静态内部类,实例化B,则:A.B b = new A().new B();

3、内部类可以引用外部类的静态或者非静态属性或者方法。

 

静态内部类:

1、属性和方法可以声明为静态的或者非静态的。

2、实例化静态内部类:比如:B是A的静态内部类,A.B b = new A.B();

3、内部类只能引用外部类的静态的属性或者方法。

4、如果属性或者方法声明为静态的,那么可以直接通过类名直接使用。比如B是A的静态内部类,b()是B中的一个静态属性,则可以:A.B.b();

 

关于java静态方法的相关总结:

一个类的静态方法只能访问静态属性(静态方法是属于类的,而普通方法是属于对象的。)

一个类的静态方法不能够直接调用非静态方法;

如访问控制权限允许,static 属性和方法可以使用类名加“.”方式调用;当然也可以使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值