Android 面试题二

简介: Android 面试题二

跨进程通信的几种方式

Intent,比如拨打电话
  ContentProvider 数据库存储数据
  Broadcast 广播通信
  AIDL通信,通过接口共享数据

wait和sleep 的区别

wait是Object的方法,wait是对象锁,锁定方法不让继续执行,当执行notify方法后就会继续执行,sellp是

String,StringBuffer,StringBuilder的区别

  String不可改变对象,一旦创建就不能修改
  String str="aaa";
  str="bbb";
  以上代码虽然改变了str,但是执行过程是回收str,把值赋给一个新的str
  StringBuffer创建之后,可以去修改
  StringBuilder也可修改,执行效率高于StringBuffer,不安全
  当字符赋值少使用String
  字符赋值频繁使用StringBuilder
  当多个线程同步操作数据,使用StringBuffer

View和SurfaceView的区别

View基于主线程刷新UI,SurfaceView子线程又可以刷新UI

View和SurfaceView的区别

View基于主线程刷新UI,SurfaceView子线程又可以刷新UI

View和SurfaceView的区别

View基于主线程刷新UI,SurfaceView子线程又可以刷新UI

简述TCP,UDP,Socket

TCP是经过3次握手,4次挥手完成一串数据的传送
  UDP是无连接的,知道IP地址和端口号,向其发送数据即可,不管数据是否发送成功
  Socket是一种不同计算机,实时连接,比如说传送文件,即时通讯

音视频相关类

总体来说,分为几个类
  视频录制方面,Camear摄像头录制视频类,MediaProjection屏幕录制视频类
  编码方面,MediaCodec,MediaRecorder
  预览方面,SurfaceView,GLSurfaceView,TextureView,VideoView

进程和线程的区别

概念:进程包括多个线程,一个程序一个进程,多线程的优点可以提高执行效率,提高资源利用率
  创建:Thread类和Runnable接口,
  常用方法有:
  start()用于启动线程
  run()调用线程对象中的run方法
  join()合并插队到当前线程
  sellp()睡眠释放cpu资源
  setPriority()设置线程优先级

内存泄露如何查看和解决

概念:有些对象只有有限的生命周期,当他们的任务完成之后,它们将被垃圾回收,如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,着就会导致内存泄露。
  解决方法:使用开源框架LeakCanary检测针对性解决
  常见的内存泄露有:
  单例造成的内存泄露,例如单例中的Context生命周期大于本身Context生命周期
  线程使用Hander造成的内存卸扣,当activity已经结束,线程依然在运行更新UI
  非静态类使用静态变量导致无法回收释放造成泄露
  WebView网页过多造成内存泄露
  资源未关闭造成泄露,例如数据库使用完之后关闭连接

View的分发机制,滑动冲突

View的事件传递顺序有3个重要的方法,dispatchTouchEvent()是否消耗了本次事件,onInterceptTouchEvent()是否拦截了本次事件,onTouchEvent()是否处理本次事件,滑动冲突分为同方向滑动冲突,例如ScrollView和ListView,同方向滑动冲突,可以计算ListView高度而动态设置ListView的高度,ScrollView高度可变。例如ViewPager和ListView,不同方向滑动冲突,一个是横向滑动一个是竖直滑动,不同方向滑动可以判断滑动的x,y轴是横向还是竖直滑动,如果判断得到是横向滑动,就拦截ListView的事件,竖则反之。

RecyclerView和ListView的区别

缓存上:前者缓存的是View+ViewHolder+flag,不用每次调用findViewById,后者则只是缓存View
  刷新数据方面,前者提供了局部刷新,后者则全部刷新

recyclerView嵌套卡顿解决如何解决

设置预加载的数量LinearLayoutManager.setInitialPrefetchItemCount(4),默认是预加载2个,
  设置子项缓存,设置自带滑动冲突解决属性rv.setHasFixedSize(true);        rv.setNestedScrollingEnabled(false);
  可以完美解决,不过Google不推荐RecyClerView嵌套使用,需要嵌套尽量找类似于ExpandableListView 第三方控件来解决

谈MVC ,MVP,MVVM

MVC:View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些 业务逻辑。 在MVC模型里,更关注的Model的不变,而同时有多个对Model的不同显示,及View。所以,在MVC模型里,Model不依赖于View,但是 View是依赖于Model的。不仅如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。
  MVP:MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。
  MVVM:数据双向绑定,通过数据驱动UI,M提供数据,V视图,VM即数据驱动层

dagger2

Dagger2是一个主要用于依赖注入的框架,减少初始化对象操作,降低耦合度

Android性能优化

布局优化: 减少布局层级,使用ViewStub提高显示速度,布局复用,尽可能少使用warp_content,删除空间中无用的属性,避免过度绘制移除window默认背景,按需显示展位图,自定义View优化,使用canvas.clipRect()识别可见区域
  启动速度:采用分布加载,异步加载,延期加载提高应用初始化速度,采用线程初始化数据等,合理的刷新机制
  内存方面:防止内存泄露,使用一些第三方工具检测解决
  代码优化:遵循Java生命周期
  安装包优化:删除无用资源,优化图片,代码混淆,避免重复库存在,插件化

Hander原理

Handler,loop轮询检测发送消息到MessagerQuery,MessageQuery对Message入列,Handler回调方法处理消息,重写handMessage方法刷新ui

SharedPreference跨进程使用会怎么样?如何保证跨进程使用安全?

在两个应用的manifest配置中好相同的shartdUserId属性,A应用正常保存数据,B应用
  createPackageContext("com.netease.nim.demo", CONTEXT_IGNORE_SECURITY)
  获取context然后获取应用数据,为保证数据安全,使用加密存储

推送到达率如何提高

判手机系统,小米使用小米推送,华为使用华为推送,其他手机使用友盟推送

activity,fragment传值问题

通过Bundle传值,在activty定义变量传值,扩展fragment创建传值
目录
相关文章
|
7月前
|
XML Java Android开发
Android面试官最喜欢问15道面试题
Android面试官最喜欢问15道面试题
93 0
|
7月前
|
存储 SQL 安全
Android面试中问的线程相关问题
Android面试中问的线程相关问题
40 0
|
11月前
|
搜索推荐 算法 Android开发
【Android面试】有1000个数,1000个数的大小范围是0-999,有两个相同的数字,请设计算法找出来
思路如下: 1000个数字只有两个相同的数字,那就是说把数组排序后,这两个数一定相邻。通过排序算法进行排序,在循环判断相邻的数即可。
192 0
|
7月前
|
网络协议 算法 安全
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
|
1月前
|
存储 安全 Java
Android 面试题及答案整理,最新面试题
Android 面试题及答案整理,最新面试题
91 2
|
7月前
|
程序员 数据库 Android开发
面试问你Android中Context,你如何回答?
面试问你Android中Context,你如何回答?
65 0
|
7月前
|
存储 算法 Java
Android 面试必备 - JVM 及 类加载机制
Android 面试必备 - JVM 及 类加载机制
|
8月前
|
Android开发
Android面试常客之Handler全解1
Android面试常客之Handler全解
|
7月前
|
SQL Java Linux
Android面试问题收集
Android面试问题收集
75 1
|
7月前
|
算法 网络协议 Java
Android面试知识点复习手册(收藏)
Android面试知识点复习手册(收藏)
85 0