1、 android:layout_weight的真实含义
首先声明只有在Linearlayout中,该属性才有效。之所以android:layout_weight会引起争议,是因为在设置该属性的同时,设置android:layout_width为wrap_content和match_parent会造成两种截然相反的效果。
android:layout_weight的真实含义是:一旦View设置了该属性(假设有效的情况下,那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比。
详见:android:layout_weight的真实含义
2、线性布局中如何按比例显示子控件?
如果线性布局是垂直方向,子控件设置属性android:layout_height=“0dp”,然后使用android:layout_weight可以按比例显示子控件。
4、什么是ANR问题,为什么会引起ANR?
Application Not Response应用程序无响应。
- 在Service后台执行耗时操作。
- BroadcastReceiver的onReceiver方法中执行耗时操作。
- 应用程序可以接收输入事件(按键、触屏、轨迹球等),当5秒内没有处理完毕时,则会引发ANR。
ANR机制以及问题分析https://duanqz.github.io/2015-10-12-ANR-Analysis
5、主线程中的Looper.loop()一直无限循环为什么不会造成ANR?
参考:来自http://www.jianshu.com/p/cfe50b8b0a41
正如我们所知,在Android中如果主线程中进行耗时操作会引发ANR异常。
造成ANR的原因一般有两种:
- 当前的事件没有机会得到处理(即主线程正在处理一个事件,没有及时地完成或者looper被某种原因阻塞住了)
- 当前的事件正在处理,但没有及时完成。
因为Android 的是由事件驱动的,looper.loop() 不断地接收事件、处理事件,每一个点击触摸或者说Activity的生命周期都是运行在 Looper.loop() 的控制之下,如果它停止了,应用也就停止了。只能是某一个消息或者说对消息的处理阻塞了 Looper.loop(),而不是 Looper.loop() 阻塞它。
也就说我们的代码其实就是在这个循环里面去执行的,当然不会阻塞了。
6、ListView滑动卡顿和解决方法
1 ListView对应的适配器,使用ViewHolder机制,重用contentView,避免每次调用getView方法都创建contentView。
2不要在getView方法中执行耗时操作。
3 控制异步任务的执行频率。
4 如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
5 在列表滑动的时候停止加载图片,尽管这个过程是异步的,等列表停下来以后再加载图。
7、android 中进程的优先级
前台进程
可见进程
服务进程
后台进程
空进程
8、Service生命周期,Service中可以执行耗时操作吗?
Service有两种启动方式,bindService()和startService()。
调用bindService()
onCreate()->onBind()->Clients are bound to service->onUnbind()->onDestroy()
Service shut down
调用startService()
onCreate()->onStartCommand()->Service running ->onDestroy()
Service shut down
Service是运行在主线程的后台服务,不可执行耗时操作,否则出现ANR错误。
9、SharedPreferences.Editor 的commit和apply区别
- apply()方法没有返回值,commit()方法返回值类型是boolean,表明修改是否提交成功。
- apply是将修改数据提交到内存,之后异步提交到硬件磁盘;而commit是同步提交到磁盘,因此,在多个并发的提交commit的时候,commit会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。而apply会先将数据提交到内存中,后面调用apply函数时会直接覆盖前面的内存数据,这样从一定程度上提高了效率。
- apply方法不会提示任何失败的提示。
10、h5页面如何获取手机的imei值
android中获取手机Imei值比较简单,可定义一个方法,然后js与java的交互通过js桥接方式,js调用android中获取手机Imei值的方法。
11、解析xml的几种方式的原理和特点:DOM,SAX,PULL
DOM:消耗内存,先把xml文档都都读到内存中,然后再用DOM API来访问树形结构,并获取数据。这个写起来很简单,但是很消耗内存。
SAX:解析效率高,占用内存少,基于事件驱动的。更加简单的说就是对文档进行顺序扫描,当扫描到文档开始与结束,元素开始与结束,文档结束等地方时通知事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
PULL:与SAX类似,也是基于事件驱动,我们可以调用它的next方法,来获取下一个解析事件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。在PULL解析过程中,我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。PULL解析器小巧轻便,解析速度块,简单易用,非常适合在android移动设备中使用,android系统内部在解析各种xml时也是用PULL解析器。
12、Android Jetpack组件中ViewModel设计目的
ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。 它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。在Activity被永久销毁(如finish或用户退出)时才清除。
13、用java语言计算余弦值
/**
* 计算角度的余弦值
* @param degrees 角度值
* @return 余弦值
*/
public static double cosDegrees(double degrees) {
return Math.cos(Math.toRadians(degrees));
}

被折叠的 条评论
为什么被折叠?



