主要分为android和java。
1、Fragment传值。setArgument或者在onAttach中获取接口。
2、commit和commitAllowingStateLoss的区别。commit在onSaveInstanceState()之前调用,commitAllowingStateLoss在onSaveInstanceState()之后调用。
3、ListView的复用机制。每个viewType对应一个RecycleBin。所有不在屏幕上的item都缓存在RecycleBin。
4、viewpager中的Fragment怎么判断是否用户可见。setUserVisibleHint或者PagerSelectListener
5、onMeasure方法作用。测量大小并告诉父控件。
6、inflate各个参数。第一个参数略,第二个参数是父布局,第三个参数是是否放进父布局。
参考:https://blog.csdn.net/u012702547/article/details/52628453
7、followLayout。onMeasure函数里面存储临时变量w、h。遍历每一个child,Measure他们的宽度,如果总w达到最大值,就把这个child放在下一行,增加一个h。按照onMeasure里面的方案在onLayout里面放置每一个child。
8、事件分发机制。略。
9、圆形图片怎么做。对bitmap或者imageView的onDraw进行操作,drawBitmap时传入一个圆形的渲染器(shader)
protected void onDraw(Canvas canvas) {
mPaint = new Paint();
Drawable drawable = getDrawable();
if (null != drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
//初始化BitmapShader,传入bitmap对象
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//计算缩放比例
mScale = (mRadius * 2.0f) / Math.min(bitmap.getHeight(), bitmap.getWidth());
Matrix matrix = new Matrix();
matrix.setScale(mScale, mScale);
bitmapShader.setLocalMatrix(matrix);
mPaint.setShader(bitmapShader);
//画圆形,指定好坐标,半径,画笔
canvas.drawCircle(mRadius, mRadius, mRadius, mPaint);
} else {
super.onDraw(canvas);
}
}
10、本地图片预览(高分辨率的图片怎样处理)
public static Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
//避免出现内存溢出的情况,进行相应的属性设置。
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither = true;
return BitmapFactory.decodeFile(filePath, options);
}
11、Retrofit的优点。略
12、Activity四种启动方式。standard。singleTask:ABC再开B会关掉C,B回调onNewIntent。singleInstance:新栈,栈里只有他。singleTop:栈顶再开一次,调onNewIntent
13、LeakCanary。在被监控的页面加一个变量,看他的回收情况。
14、apk打包流程
15、android的handler的机制是什么
1、synchronized
2、堆和栈。堆是进程共享的;一个线程一个栈,执行一个方法创建一个栈帧,栈帧负责存储局部变量变量表、操作数栈、动态链接和方法返回地址等信息。
3、GC
一般说来,我们要解决一些三个问题:
这些问题分别对应着引用管理和回收策略等方案。
提到引用,我们都知道Java中有四种引用类型:
不同的引用类型,在做GC时会区别对待,我们平时生成的Java对象,默认都是强引用,也就是说只要强引用还在,GC就不会回收,那么如何判断强引用是否存在呢?
一个简单的思路就是:引用计数法,有对这个对象的引用就+1,不再引用就-1,但是这种方式看起来简单美好,但它却不嫩解决循环引用计数的问题。
因此可达性分析算法登上历史舞台,用它来判断对象的引用是否存在。
可达性分析算法通过一系列称为GC Roots的对象作为起始点,从这些节点从上向下搜索,搜索走过的路径称为引用链,当一个对象没有任何引用链 与GC Roots连接时就说明此对象不可用,也就是对象不可达。
GC Roots对象通常包括:
可达性分析算法整个流程如下所示:
4、内存分代GC
三、框架
1、TCP与UDP的差别
2、三次握手和四次分手,略。