Android基础知识整理

Android基础

  • AIDL介绍以及使用说明
  • HandlerThread介绍及使用说明
  • IntentService介绍和使用说明
  • Touch事件的传递
  • Bundle数据结构
  • ListView内点击Button事件传递
  • IPC8种方式
  • Handler原理
  • TraceVIew的使用
  • Binder原理介绍

Java基础

  • Java 类加载过程
    加载-校验-准备-解析-初始化-使用-卸载
  • 多线程中的锁
  • 四种线程池
  • ThreadLocal
  • join、wait
  • volatile
  • Hash碰撞

计算机基础

  • HTTPS协议 = HTTP协议 + SSL/TLS协议
    SSL的全称是Secure Sockets Layer
    TLS的全称是Transport Layer Security
    https://www.jianshu.com/p/14cd2c9d2cd2
  • 从地址栏输入http://www.gaxis.cn这个URL之后,直到我的个人主页加载完成,中间到底发生了什么呢?
    大概经历了以下过程:
  1. 分析域名(gaxis)
  2. TCP三次握手(嘿,我能连你吗?/完全OjbK啊。/那我连了啊。)
  3. 建立TCP连接
  4. 浏览器发起HTTP请求
  5. 服务器响应请求(哇兄弟你找我了,我收拾一下给你的数据和应答码——这里可以展开讲服务器如何响应)
  6. 浏览器解析html代码并请求html中的js/css/图片等资源
  7. 浏览器进行页面渲染呈现给用户

设计模式

  • MVP

开源库

  • Retrofit

ListView中Button点击事件被拦截的解决方案
在item的xml布局的根节点中添加属性:
android:descendantFocusability=“blocksDescendants”
在button控件上添加属性:
android:focusable=”false”

MVP
https://www.jianshu.com/p/7398ec36d591

======
1、AsyncTask

介绍:

AsyncTask是一种轻量级的异步任务类,可以在后台线程池中执行后台的任务,然后把执行的进度和最终的结果传递给主线程并在主线程中更新UI。从实现上来说,AsyncTask封装了Thread和Handler。但它并不适合特别耗时的任务,对于特别耗时的任务应该使用线程池。

它是一个泛型抽象类,Params表示参数的类型,Progress表示后台任务进度的类型,而Result表示结果的返回类。

使用特点:

(1)它必须在主线程中创建,execute方法必须在主线程中调用

(2)execute方法只能执行一次,虽然可以传很多个参数(任务)

工作原理:

AsyncTask实际上是对线程池和Handler进行了封装。

(1)任务执行:

3.0之前,AsyncTask是并行执行的,而3.0之后就变为了串行执行,并且开发者可以选择进行并行执行。原理是什么呢?实际上它内部有两个线程池,sDefaultExecutor是一个自己实现的串行的线程池,它是static的,说明一个进程内的所有任务都是它来执行,它的任务很简单,就是把任务放进一个队列中,然后提醒另一个并行的线程池THREAD_POOL_EXECUTOR来取出执行,如果有可取的并且当前没有任务在执行就会被这个并行的线程池来执行。如果有任务在执行自然不会执行,当这个任务执行完之后又会重新提醒并行的线程池THREAD_POOL_EXECUTOR来取出队列中的任务进行执行。所以从这个原理我们看出来它是串行执行的,原因就是老版本是并行的并且很多代码依赖于这个逻辑。

(2)任务结果分发

它的内部有一个static的handler,所以这也是它必须在UI线程中进行初始化的原因,这样可以保证Handler被正常的初始化。当任务执行完成后,就会将结果发送给Handler,使得其在主线程被执行。

2、HandlerThread

(1) HandlerThread本质上是一个线程类,继承了Thread

(2) HandlerThread有自己内部的Looper对象,可以进行Looper循环

(3) 通过获取HandlerThread的Looper对象传递给Handler对象,可以在HandleMessage方法中执行异步任务

(4) 有点事不会有阻塞,减少了对性能的消耗,缺点是不能同时进行多任务处理,需要等待进行处理,处理效率底

(5) 与线程池重并发不同,HandlerThread是一个串行队列,HandlerThread背后只有一个线程

3、IntentService

介绍:

仅仅是一个封装了HandlerThread的Service而已,由于Service正常来说也是执行在主线程的,所以不能执行耗时的操作。而IntentService在内部维护有个HandlerThread,它拥有自身的Handler,对应于HandlerThread的Looper。当收到一个Intent时,它将Intent包装到Message中直接发送给Handler来处理,从而避免了在主线程中进行操作。

使用:

重写onHandleIntent,在其中处理Intent,并且这个是不在主线程中运行的。

IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService的方法和启动传统Service方法一样,同时,当任务执行完成后,IntentService会自动停止,而不需要手动去控制或者stopSelf(),另外,可以多次启动IntentService,而每一个耗时操作会以工作队列的方式在IntentService的onHandleIntent回调中执行,并且,每次只执行一个任务,执行完成一个再执行第二个


作者:渐忘的歌
来源:CSDN
原文:https://blog.csdn.net/qq_35503221/article/details/80297404
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Android基础知识整理)