Android面试集锦 野性酷女 2023-01-21 14:20 1阅读 0赞 横竖屏切换,Android生命周期的变化 不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次; 设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次; 设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。 Fragment中add与replace的区别? a.add不会重新初始化fragment,replace每次都会; b.添加相同的fragment时,replace不会有任何变化,add会报IllegalStateException 异常; c.replace 先 remove 掉相同 id 的所有 fragment,然后在add 当前的这个 fragment,而 add 是覆盖前一个fragment。所以如果使用 add 一般会伴随 hide()和show(),避免布局重叠; d.使用 add,如果应用放在后台,或以其他方式被系统销毁,再打开时,hide()中引用的 fragment 会销毁,所以依然会出现布局重叠 bug,可以使用 replace 或使用 add时,添加一个 tag 参数; FragmentPagerAdapter 与 与 FragmentStatePagerAdapter 的区别与使用场景? a.FragmentPagerAdapter 的每个 Fragment 会持久的保存在 FragmentManager 中,只要用户可以返回到页面中,它都不会被销毁。因此适用于那些数据 相对静态的页,Fragment 数量也比较少的那种; b.FragmentStatePagerAdapter 只保留当前页面,当页面不可见时,该 Fragment 就会被消除,释放其资源。因此适用于那些 数据动态性较大、占用内存较多,多 Fragment 的情况; View和SurfaceView的区别 View基于主线程刷新UI,SurfaceView子线程又可以刷新UI View的分发机制,滑动冲突 View的事件传递顺序有3个重要的方法,dispatchTouchEvent()是否消耗了本次事件,onInterceptTouchEvent()是否拦截了本次事件,onTouchEvent()是否处理本次事件,滑动冲突分为同方向滑动冲突,例如ScrollView和ListView,同方向滑动冲突,可以计算ListView高度而动态设置ListView的高度,ScrollView高度可变。例如ViewPager和ListView,不同方向滑动冲突,一个是横向滑动一个是竖直滑动,不同方向滑动可以判断滑动的x,y轴是横向还是竖直滑动,如果判断得到是横向滑动,就拦截ListView的事件,竖则反之。 RecyclerView和ListView的区别 缓存上:RecyclerView缓存的是View+ViewHolder+flag,不用每次调用findViewById,ListView则只是缓存View 刷新数据方面,RecyclerView提供了局部刷新,ListView则全部刷新 SharedPreference跨进程使用会怎么样?如何保证跨进程使用安全? 在两个应用的manifest配置中好相同的shartdUserId属性,A应用正常保存数据,B应用 createPackageContext(“com.netease.nim.demo”, CONTEXT\_IGNORE\_SECURITY) 获取context然后获取应用数据,为保证数据安全,使用加密存储 Android性能优化 a.布局优化: 减少布局层级,使用ViewStub提高显示速度,布局服用,尽可能少使用warp\_content,删除空间中无用的属性,避免过度绘制移除window默认背景,按需显示展位图,自定义View优化,使用canvas.clipRect()识别可见区域; b.启动速度:采用分布加载,异步加载,延期加载提高应用初始化速度,采用线程初始化数据等,合理的刷新机制; c.内存方面:防止内存泄露,使用一些第三方工具检测解决; d.代码优化:遵循Java生命周期; e安装包优化:删除无用资源,优化图片,代码混淆,避免重复库存在,插件化。 常见的内存泄露 单例造成的内存泄露,例如单例中的Context生命周期大于本身Context生命周期 线程使用Hander造成的内存卸扣,当activity已经结束,线程依然在运行更新UI 非静态类使用静态变量导致无法回收释放造成泄露 WebView网页过多造成内存泄露 资源未关闭造成泄露,例如数据库使用完之后关闭连接 简述TCP,UDP,Socket TCP是经过3次握手,4次挥手完成一串数据的传送 UDP是无连接的,知道IP地址和端口号,向其发送数据即可,不管数据是否发送成功 Socket是一种不同计算机,实时连接,比如说传送文件,即时通讯
还没有评论,来说两句吧...