• Android相关知识点面试


    1.热修复的原理及其优缺点

     插件化和热修复的原理,都是动态加载 dex/apk 中的类/资源,两者的目的不同。目标不同,也就导致其实现方式上的差别。由于目标是动态加载组件,所以插件化重在解决组件的生命周期,以及资源的问题。而热修复重在解决替换已有的有问题的类/方法/资源等。

    优点:1.使用 java 实现,开发方便2.兼容性好3.补丁实时生效

    缺点:1.代码是侵入比较高,需要在原有代码中新增逻辑,而且需要对方法进行插桩,将这里逻辑自动化处理   2.增大包体积

    2,描述一下Handler

    3,一个线程可否有多个Handler,怎么保证只有一个Looper

    答:一个线程只有一个Looper,保证:Handler 主要利用了 ThreadLocal 在每个线程单独存储副本的特性,保证了一个ThreadLocal<Looper>在不同线程存取的Looper对象相互独立;其次,ThreadLocal 是 Looper 的一个static final变量,这样就保证了整个进程中 sThreadLocal对象不可变;第三,Looper.prepare()判断在一个线程里重复调用,则会抛出异常。

    Handler与Looper的关联:在Handler中有两个全局变量mLooper和mQueue代表当前Handler关联的Looper和消息队列,并在构造函数中进行了初始化,重要的就是调用了:Looper.myLooper()。
    public static @Nullable Looper myLooper() {
            return sThreadLocal.get();
        }

    其实还是调用的线程局部变量sThreadLocal,获取当前线程的Looper,这里需要注意的是,如果当前线程没有关联的Looper,这个方法会返回null。

    注意:Handler在哪个线程创建的,就跟哪个线程的Looper关联,也可以在Handler的构造方法中传入指定的Looper

    同一个Looper是怎么区分不同的Handler的,换句话说,不同的Handler是怎么做到处理自己发出的消息的

    这个问题就要来到Handler的sendMessage方法里面了,具体的流程这里不详说了,最后来到了这个方法

    Handler.enqueueMessage

    private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
            msg.target = this;
            if (mAsynchronous) {
                msg.setAsynchronous(true);
            }
            return queue.enqueueMessage(msg, uptimeMillis);
        }

    可以看到这一句msg.target = this;,这里就是将当前的Handler赋值给Message对象,这样在处理消息的时候通过msg.target就可以区分开不同的Handler了。处理的方法在Looper.loop中:

    Looper.loop()

    ...
    msg.target.dispatchMessage(msg);
    ...
    

    顺便提一句,在Message的obtain的各种重载方法里面也有对target的赋值

    4,fragment生命周期,activity生命周期

    我说出了fragment的onAttach onCreateView onActivityCreated 几个独有的,但跟activity直接的顺序好像说错了

    5,activity启动模式

    A app 的activity 启动 B app 的 activity 栈的变化

    8,mvp

    讲了对mvp的理解,补充说了对职责的理解

    9.大文件传输的设计

    10.调度算法?抢占式和非抢占式?

    11.git rebase和merge的区别

    持续更新中.....
  • 相关阅读:
    【转】Android——设置颜色的三种方法
    Eclipse Android安装APP时覆盖安装问题
    自定义数组,实现输出改数组的长度、最大值和最小值
    用程序实现对数组a[45,96,78,6,18,66,50]中的元素进行排序
    PHP面试题2
    PHP面试题
    gulp
    移动端base.css
    笔记
    mouseover和mouseout事件在鼠标经过子元素时也会触发
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/14663530.html
Copyright © 2020-2023  润新知