美文网首页
春招笔记(三)安卓第一部分

春招笔记(三)安卓第一部分

作者: 松爱家的小秦 | 来源:发表于2019-03-08 23:31 被阅读0次

    1.说说自己用过的自定义控件

    自定义View的步骤:

    自定义View的属性

    在View的构造方法中获得我们自定义View的步骤

    [3.重写onMeasure](不必须)

    重写onDraw

    2.Serializable 和Parcelable 的区别;

    什么是序列化 —— 序列化,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。

    怎么通过序列化传输对象?

    Android中Intent如果要传递类对象,可以通过两种方式实现。

    方式一:Serializable,要传递的类实现Serializable接口传递对象,

    方式二:Parcelable,要传递的类实现Parcelable接口传递对象。

    Serializable(Java自带):

    Serializable是序列化的意思,表示将一个对象转换成可存储或可传输的状态。序列化后的对象可以在网络上进行传输,也可以存储到本地。

    Parcelable(android 专用):

    除了Serializable之外,使用Parcelable也可以实现相同的效果,

    不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解,

    而分解后的每一部分都是Intent所支持的数据类型,这样也就实现传递对象的功能了。

    实现Parcelable的作用

    1)永久性保存对象,保存对象的字节序列到本地文件中;

    2)通过序列化对象在网络中传递对象;

    3)通过序列化在进程间传递对象。

    3.请描述一下BroadcastReceiver;

    广播(Broadcast)是在组件之间传播数据的一种机制,这些组件可以位于不同的进程中,起到进程间通信的作用

    BroadcastReceiver是对发送出来的Broadcast进行过滤、接受和响应的组件。首先将要发送的消息和用于过滤的信息(Action,Category)装入一个Intent对象,然后通过调用Context.sendBroadcast()sendOrderBroadcast()方法把 Intent 对象以广播形式发送出去。 广播发送出去后,所以已注册的 BroadcastReceiver 会检查注册时的IntentFilter是否与发送的 Intent 相匹配,若匹配则会调用 BroadcastReceiver 的onReceiver()方法

    4.Binder机制及底层实现;

    Binder是Android系统进程间通信(IPC)方式之一。

    Binder使用Client-Server通信方式。Binder框架定义了四个角色:Server,Client,ServiceManager以及Binder驱动。其中Server,Client,ServiceManager运行于用户空间,驱动运行于内核空间。Binder驱动程序提供设备文件/dev/binder与用户空间交互,Client、Server和Service Manager通过open和ioctl文件操作函数与Binder驱动程序进行通信。

    服务器端:一个Binder服务器就是一个Binder类的对象。当创建一个Binder对象后,内部就会开启一个线程,这个线程用户接收binder驱动发送的消息,收到消息后,会执行相关的服务代码。

    Binder驱动:当服务端成功创建一个Binder对象后,Binder驱动也会相应创建一个mRemote对象,该对象的类型也是Binder类,客户就可以借助这个mRemote对象来访问远程服务。

    客户端:客户端要想访问Binder的远程服务,就必须获取远程服务的Binder对象在binder驱动层对应的binder驱动层对应的mRemote引用。当获取到mRemote对象的引用后,就可以调用相应Binde对象的服务了。

    5.ListView 中图片错位的问题是如何产生的

    RecycleBin机制是ListView能够实现成百上千条数据都不会OOM最重要的一个原因。RecycleBin是AbsListView的一个内部类。

    根据ListView的工作原理,被移出屏幕的控件将会很快被新进入屏幕的元素重新利用起来,而如果在这个时候刚好前面发起的图片请求有了响应,就会将刚才位置上的图片显示到当前位置上,因为虽然它们位置不同,但都是共用的同一个ImageView实例,这样就出现了图片乱序的情况

    但是还没完,新进入屏幕的元素它也会发起一条网络请求来获取当前位置的图片,等到图片下载完的时候会设置到同样的ImageView上面,因此就会出现先显示一张图片,然后又变成了另外一张图片的情况,那么刚才我们看到的图片会自动变来变去的情况也就得到了解释

    解决方案:

    1.findViewWithTag

    2.使用弱引用关联

    3. 使用NetworkImageView

    6.请描述一下Android 的事件分发机制;

     事件分发的本质

    答:将点击事件(MotionEvent)传递到某个具体的View & 处理的整个过程

    即 事件传递的过程 = 分发过程。

    事件在哪些对象之间进行传递?

    答:Activity、ViewGroup、View

    事件分发的顺序

    即 事件传递的顺序:Activity -> ViewGroup -> View

    即:1个点击事件发生后,事件先传到Activity、再传到ViewGroup、最终再传到 View

    事件分发过程由哪些方法协作完成?

    答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()

    当一个点击事件发生时,从Activity的事件分发开始(Activity.dispatchTouchEvent())

    结论:Android事件分发总是先传递到ViewGroup、再传递到View

    过程:当点击了某个控件时

    相关文章

      网友评论

          本文标题:春招笔记(三)安卓第一部分

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