Android基础2

java的基本数据类型有哪些?
int、long、short、byte、char、boolean、float、double

java基本数据类型的字节多大?
byte:1
short:2
int:4
long:8
char:2
float:4
double:8
boolean:1/8字节

引用数据类型有哪些?
类、接口、数组、枚举、字符串

基本数据类型和引用数据类型的区别?

  • 存储位置不同:基本数据类型被创建时在栈上划分内存直接存储在栈上,而引用数据类型是在栈上给引用分配一块内存,对象的具体信息都存储在堆上。
  • 传递方式不同:方法中定义的非全局基本数据类型变量调用方法时是按值传递的,而引用数据类型变量调用方法时是按引用传递的

tcp/ip协议上有哪些层,这些层上的协议是什么?
四层

  • 应用层:Http、ftp、smtp、dns协议
  • 运输层:tcp、udp协议
  • 网络层:ip协议
  • 网络接口层

tcp和udp的区别,tcp如何保证可靠性?

  • udp无连接,tcp面向连接
  • tcp可靠,udp不可靠
  • tcp只支持点对点通信,udp支持多种通信方式
  • tcp面向字节流,udp面向报文
  • tcp首部开销有20个字节,开销更大,udp首部8个字节
  • tcp速度比udp慢

tcp可靠:tcp需要通过三次握手、四次挥手来建立和断开连接,并且在传输过程中还有流量控制、拥塞控制、失败重传等机制来保证tcp的可靠性,而udp只是尽最大努力交付,不保证可靠交付数据

数组和链表的区别?

  • 数组是由下表索引和data两部分组成,链表是由data和指向下一个数据的指针地址两部分组成
  • 在内存中,数组是一块连续的内存空间,并且数组需要预留空间,它的遍历速度很快,但是添加和删除元素操作比较慢。链表在内存中可以不连续,遍历速度相比数组较慢,但是添加和删除元素较快。所以这两个需要根据场景的不同来进行合适的选择

Service的两种启动方式和区别?

  • StartService:如果Service还没有创建,那么调用的顺序是onCreate()、onStartCommand()。服务启动了之后会一直保持运行状态,直到stopService()或者stopSelf()方法被调用,服务停止并回调onDestroy()
  • bindService:假如Service还没有创建,那么回调的顺序是onCreate()、onBind()。然后调用方可以获取到onBind()方法里返回的IBinder对象实例从而实现和Service进行通信,只要调用方和服务方之间的连接没有断开,Service就会一直处于运行状态,直到调用了unBindService()方法

广播注册的两种方式?

  • 在Activity中通过代码动态注册
  • 在配置文件里静态注册
  • 相同点:都完成了对接收器以及它能接受的广播值的定义
  • 不同点:动态注册的接收器必须要在程序启动之后才能接受广播,而静态注册的接收器即使程序未启动也能接收到广播

View是怎么绘制到屏幕上的?
通过三个阶段:onMeasure()、onLayout、onDraw()

Https?
客户端向服务端发起https请求,服务端返回包含公钥的证书,客户端验证证书后获得其中的公钥,然后产生一个随机数并用公钥对其进行加密,再将加密后的信息发送给服务端,服务端用私钥对加密后的信息进行解密得到其中的随机数,再根据这个随机数构造加密算法,然后对自己要发送的信息进行加密后发送给客户端,客户端就能够通过该随机数进行解密。
该过程中在证书的验证阶段是非对称加密,信息的传递依然是用的对称加密,因为虽然非对称加密更加的安全,但是会很慢。
在https过程中只有服务端有私钥

View的事件分发机制?

  • 事件分发的本质:就是对MotionEvent事件分发的过程。即当一个motionEvent产生以后,系统需要将这个点击事件传递到一个具体的View上
  • 点击事件的传递顺序:Activity(Window)-》 ViewGroup -》 View
  • 三个主要方法:
    • dispatchTouchEvent:进行事件的分发。
    • onInterceptTouchEvent:对事件进行拦截,该方法只有ViewGroup中存在,View中没有,一旦拦截,就会执行ViewGroup的onTouchEvent,在ViewGroup中处理事件,而不会接着分发给View,并且只会调用一次
    • onTouchEvent:进行事件处理

如何解决View的滑动冲突?

  • 处理规则:

    • 对于由于外部滑动和内部滑动方向不一致导致的滑动冲突,可以根据滑动的方向判断谁来拦截事件
    • 对于由于外部滑动方向和内部滑动方向一致的滑动冲突,可以根据业务需求,规定何时让外部View拦截事件何时由内部View拦截事件
  • 实现方法:

    • 外部拦截法:就是点击事件都需要先经过父容器的拦截处理,如果父容器需要此事件就拦截,否则就不拦截。具体方法:需要重写父容器的onInterceptTouchEvent方法,在内部做出相应的拦截
    • 内部拦截法:在父容器不拦截任何事件,而将所有的事件都传递给子容器,如果子容器需要此事件就直接消耗,否则就交由父容器进行处理。具体方法:需要配合requestDisallowInterceptTouchEvent方法

Activity的启动过程?
调用startActivity()后经过一些方法会转移到ActivityManagerService的startActivity(),并通过一个IPC回到ActivityThread的内部类ApplicationThread中,并调用其scheduleLaunchActivity()将启动Activity的消息发送并交由Handler H处理。Handler H对消息的处理会调用handleLaunchActivity(),performLaunchActivity()得以完成Activity对象的创建和启动

IntentService的特点?

  • 它和线程不同的是:IntentService是服务,优先级比线程更高,更不容易被系统杀死,因此适合执行一些高优先级的后台任务;不同于普通Service,IntentService可以自动创建子线程来执行任务,并且在任务执行完毕后会自动退出
  • 原理:IntentService在onCreate()里会创建一个HandlerThread,并利用其内部的Looper实例化一个ServiceHandler对象;而这个ServiceHandler用于处理消息的handleMessage()方法会去调用IntentService的onHandleIntent(),这也是为什么可以在该方法中处理后台任务的原因:当有Intent任务请求时会把Intent封装到Message,然后ServiceHandler会把消息发出。

Handler?

  • 作用:跨线程通信。当子线程中进行耗时操作后需要更新UI时,通过Handler将有关UI的操作切换到主线程中执行
  • 四要素:
    • Message:需要被传递的消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一队列,最终由Handler处理
    • MessageQueue:用来存放Handler发送过来的信息,内部通过单链表的数据结构来维护消息列表,等待Looper的抽取
    • Handler:负责Message的发送及处理。通过Handler.sendMessage()向消息池发送各种消息事件,通过Handler.handleMessage()处理相应的消息事件
    • Looper:通过Looper.loop()不断从MessageQueue抽取message,按分发机制将消息分发给目标处理者

Handler.sendMessage()发送消息时,会通过MessageQueue.enqueueMessage()向MessageQueue中添加一条消息
通过Looper.loop()开启循环后,不断轮询调用MessageQueue.next();
调用目标Handler.dispatchMessage()去传递消息,目标Handler收到消息后调用Handler.handlerMessage()处理消息

View的工作流程
总体上是3个步骤:measure、layout、draw
其中:

  • measure确定View的测量宽高
  • layout确定View的最终宽高和四个顶点的位置
  • draw将View绘制到屏幕上
  • 这三个依次对应了onMeasure、onLayout、onDraw方法

具体过程:

  • ViewRoot对应ViewRootImpl类,它是连接WindowManager和DecorView的纽带
  • View的绘制流程是从ViewRoot和performTraversals开始的
  • performTraversals()依次会调用performMeasure、performLayout、performDraw三个方法,分别完成顶级View的绘制
  • performMeasure会调用measure(),measure()中又调用onMeasure()实现对所有子元素的measure过程,这样就完成了一次measure,接着子元素会重复父容器的measure过程,直到完成整个View树的遍历。layout和draw也是一样的步骤。

Fragment的生命周期?
onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDetach

Fragment和Activity的异同?

  • 相同点:Activity和Fragment都可以包含布局,可以有自己的生命周期
  • 不同点:Fragment依附在Activity上,多了些和Activity相关的生命周期方法,并且Fragment的生命周期是由Activity决定的,而不是操作系统
  • Fragment的出现是为了解决Android的碎片化,它可以作为Activity的界面的组成部分,可以在Activity运行中实现动态的假如、移除和交换
  • 一个Activity中可以同时出现多个Fragment,一个Fragment也可以在多个Activity中使用。
  • Activity的FragmentManager负责调用队列中Fragment的生命周期方法,只要Fragment的状态与Activity的状态保持了同步,Activity的FragmentManager便会继续调用其他生命周期方法以继续保持Fragment和Activity的状态一致

你可能感兴趣的:(Android学习笔记)