面试复习——Android题目

虚拟机

1、Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

2、DVM和ART

  • Dalvik采用的是JIT技术,字节码都需要通过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而ART采用Ahead-of-time(AOT)技术,应用在第一次安装的时候,字节码就会预先编译成机器码,这个过程叫做预编译
  • ART同时也改善了性能、垃圾回收(Garbage Collection)、应用程序除错以及性能分析

 

Activity面试题

1、生命周期

2、启动模式

启动模式案列

3、Intent和Bundle的区别?

  • 传递的区别:两者都可以传递对象和值,如果是多个之前Activity之间传递的话,Bundle就比Intent方便

另外一个例子  如果我现在有  Activity A ,B ,C;
现在我要把值通过A经过B传给C,你怎么传 如果用Intent的话, A-B先写一遍,再在B中都取出来 然后在把值塞到Intent中再跳到C,累吗?

如果我在A中用了 Bundle 的话,我把Bundle传给B,在B中再转传到C ,C就可以直接去了 ,这样的话 还有一个好处,就是在B中,还可以给Bundle对象添加新的 key - value ,同样可以在C中取出来

  • 另外Bundle可以用于恢复数据,在onCreate和onSaveInstance方法中,传递参数类型就是Bundle

4、横竖屏切换时候activity的生命周期?
  1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
  2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

    3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

Fragment面试题

1、Fragment的创建方式

  • 静态创建
  • 动态创建

2、生命周期

     

 

3、Fragment与Activity、Fragment之间的通信

  • FragmentManager.findFragmentById(),这种方法适用静态添加有id的Fragment,动态添加的那就无法查找,
  • interface,接口回调,
  • LocalBroadcastManager,广播是最简单灵活,
  • Fragment直接调用Activity中public方法,((MainActivity) getActivity()).showProByName(name); 

4、Fragment的方法

  • add( )
  • remove( )
  • replace( )

5、ListFragment、DialogFragment等等

6、Fragment全解析系列(一):那些年踩过的坑

7、Fragment全解析系列(二):正确的使用姿势

8、Fragment之我的解决方案:Fragmentation

 

Service面试题

 

Android基础四大组件——Service

BroadcastReceiver

1、分类

  • 普通广播
  • 有序广播
  • 系统广播
  • App内部广播,LocalBroadcast
  • 粘性广播,5.0&Api21以上不用了,在Android系统粘性广播一般用来确保重要的状态改变后的信息被持久保存,并且能随时广播给新的广播接收器,比如电源的改变,因为耗电需要一个过程,前一个过程必须提前得到,否则可能遇到下次刚好接收到的广播后系统自动关机了,随之而来的是kill行为,所以对某些未处理完的任务来说,后果很严重

2、广播注册的方式

3、两种注册方式区别在哪?

 

 ContentProvider

 

架构模式和开源库

1、MVC、MVP以及MVVM模式讲解

2、RxJava和RxAndroid

 

 

设计者模式

 

1、设计者模式——单例模式学习

2、观察者模式 —— 

 

 

Native App、Web App以及Hybird App开发

Hybird框架

性能优化专题  

Android App优化, 要怎么做?

 

1、ANR

2、UI卡顿

3、内存泄漏

4、内存溢出

5、BitMap

UI卡顿

1、UI卡顿原理

View的绘制帧数保持60fps是最佳,这要求每帧的绘制时间不超过16ms(1000/60),如果安卓不能在16ms内完成界面的渲染,那么就会出现卡顿现象

2、UI卡顿的原因分析

  • 在UI线程中做轻微的耗时操作,导致UI线程卡顿
  • 布局Layout过于复杂,无法在16ms内完成渲染
  • 同一时间动画执行的次数过多,导致CPU和GPU负载过重
  • overDraw,导致像素在同一帧的时间内被绘制多次,使CPU和GPU负载过重
  • View频繁的触发measure、layout,导致measure、layout累计耗时过多和整个View频繁的重新渲染
  • 频繁的触发GC操作导致线程暂停,会使得安卓系统在16ms内无法完成绘制
  • 冗余资源及逻辑等导致加载和执行缓慢
  • ANR

3、UI卡顿的优化

  • 布局优化 
    • 使用include、ViewStub、merge
    • 不要出现过于嵌套和冗余的布局
    • 使用自定义View取代复杂的View
  • ListView优化 
    • 复用convertView
    • 滑动不加载
  • 背景和图片优化 
    • 缩略图
    • 图片压缩
  • 避免ANR 
    • 不要在UI线程中做耗时操作

Android UI 适配

1、Android中dp dip、px和sp

  • dp = dip 
  •  px = dp * ( dip / 160 ), 标准是160dip
  • sp用于显示文字,
    /**
     * Converts an unpacked complex data value holding a dimension to its final floating 
     * point value. The two parameters <var>unit</var> and <var>value</var>
     * are as in {@link #TYPE_DIMENSION}.
     *  
     * @param unit The unit to convert from.
     * @param value The value to apply the unit to.
     * @param metrics Current display metrics to use in the conversion -- 
     *                supplies display density and scaling information.
     * 
     * @return The complex floating point value multiplied by the appropriate 
     * metrics depending on its unit. 
     */
    public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }

 

2、Android 屏幕适配方案

 

View控件类

1、ListView和RecycleView使用区别

 

  • RecycleView封装了viewHolder的回收复用,编写的Adapter面向的是ViewHolder不再是view;
  • RecycleView的布局更丰富,更加解耦,使用LayoutManager来管理,GridView效果对应的是GridLayoutManager,与瀑布流对应的还StaggeredGridLayoutManager
  • RecycleView可以控制item增删的动画,通过ItemAnimator这个类进行控制
  • ListView有setEmptyView这个数据为空api,HeaderView 和 FooterView实现上拉刷新,下拉加载更多api
  • 局部刷新,ListView有Adapter的notifyDataSetChanged整体,没有局部刷新,需要手动写,RecycleView有notifyItemChanged用于单个item刷新
  • 嵌套滚动,

2、RecycleView的拖拽效果实现---ItemTouchHelper

3、ListView为什么没有过时

ListView是采用的RecycleViewBin的回收机制,对于一些轻量的List显示时效率更高

4、RemoteView---搭配PendingIntent使用

 

网络编程

1、Http、Https

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值