美文网首页Android开发经验谈程序员Android技术知识
Android面试集锦系列(31)——通过new创建的View实

Android面试集锦系列(31)——通过new创建的View实

作者: Android架构 | 来源:发表于2019-03-21 20:47 被阅读6次

    面试多了,总会遇到一些奇葩的事情。有一次面试一家做航空娱乐系统开发的公司,老板是新加坡人。面试我的是一个小伙子,感觉是个小leader吧,很腼腆。他把我叫到一间堆满飞机坐椅和屏幕的办公室,只问了我两分钟就走了。问了几个很基础的问题,基础到我对他的问题完全没有印象。哥哥正在纳闷还有十八般武艺没有使呢,HR就来叫我去经理室,经理很爽快的问我要多少工资,要不要提成分红等问题,就说要等他的新加坡老板做决定。不到两分钟,经理的面试也经束了。全程都不带自我介绍的,我在软件园这片区这么有名了?

    第二天,新加坡老板给我打了电话,进行了一个简单的电话面试,双方答成了协义,算是通过了面试。之后HR就给我发了Offer。到这时候我都感觉很神奇,然后再回头去看看自己的简历,没有出奇的地方啊,看不出是高手啊,怎么对方这么爽快呢?也不多了解了解,我心里对这家公司也产生一些疑惑,没有过五关斩六将得到的offer总感觉不踏实。后来因为现今这家公司也发了offer,权衡了一下就没去。

    和新加坡老板电话道歉了,他感到很惋惜, 这是这么多次面试让我感到很无厘头的一次,有时真想去这家公司问问是怎么回事。

    好吧,故事讲完了,我们接着上一题,很多网友留言表示对View保存状态要设置ID这一点感兴趣。有网友提了这个问题:

    面试题:通过new创建的View实例它的onSaveStateInstance会被调用吗?

    这里再强调一下,自定义View控件的状态被保存需要满足两个条件:

    1. View有唯一的ID;
    1. View的初始化时要调用setSaveEnabled(true)

    简单看一下View状态保存和读取的调用过程:

    里面的SparseArray(完整的参数是:SparseArray<Parcelable> )是一个KEY-VALUE的Map,KEY当然就是View的ID了。所以细看一下源码的调用过程,你一下就理解为什么一定要给View调置一个唯一的ID了。

    那好,现在回答上这个网友的问题“通过new创建的View实例它的onSaveStateInstance会被调用吗?”,答案还是一样的如果设置了ID就会。其实我们在XML文件中配置的布局和属性最终都是通过LayoutInflater中的inflate方法去加载,由它去创建各个View的实例(还是用new),并根据XML文件中的属性设置相关的值。

    我们再展开一下,如果我们定义了一个自义的Layout,在同一个界面中引用了两次这个自定义的Layout(如下图的myLayout1 & myLayout2),那么它的状态会发生什么情况呢?

    我们会发现两个Layout的状态被保存了,但Layout中的每个子View状态是相同的,被最后一个保存的View覆盖了。这也是为什么我们要强调View的ID要唯一的原因。

    如何解决这个问题呢?留给大家去展开吧,你是面试官的话,也可以留给来面试的人,不过这里太细节了建议最好做为附加题让对方试试(答不上不扣分)。

    最后

    在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

    资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

    点击链接加入群聊【Android移动架构总群】:加入群聊

    资料大全

    相关文章

      网友评论

        本文标题:Android面试集锦系列(31)——通过new创建的View实

        本文链接:https://www.haomeiwen.com/subject/mfrhvqtx.html