Android多线程-线程池
一. 前言1. 为什么要用线程池?① 传统的多线程方式(继承Thread类 & 实现Runable接口)
每次新建线程 、销毁线程对象消耗资源,响应速度慢。
线程缺乏统一管理,容易出现阻塞情况。
② 线程池的优点
降低因线程的创建和销毁所带来的性能开销(通过重用缓存在线程池的线程)。
提高线程的响应速度和执行效率(重用线程达到不需要创建线程即可马上执行,线程管理可以优化线程的执行顺序)。
2. 核心参数
参数
意义
说明
corePoolSize
核心线程数
默认情况下,核心线程会一直存活,包括空闲状态
maximumPoolSize
线程池所能容纳的最大线程数
当活动线程达到该数值后,后续的新任务将会阻塞
keepAliveTime
非核心线程,闲置超时时长
超过该时长,非核心线程会被回收
unit
指定keepAliveTime参数的时间单位
常用:(毫秒)TimeUnit.MILLISECONDS,(秒)TimeUnit.SECONDS,(分)TimeUnit.MINUTES
workQueue
任务队列
通过线程池的execute ...
Android多线程-HandlerThread
一. 简介1. 定义一个 Android 已经封装好的轻量级异步类
2. 作用
实现多线程:在工作线程中执行任务,如 耗时任务。
异步通信,消息传递,实现工作线程 & 主线程之间的通信。
3. 原理
通过继承 Thread类,快速的创建一个带有Looper对象的新工作线程。
通过封装Handler类,快速的创建Handler并与其他线程进行通信。
二. 使用步骤1234567891011121314151617181920212223242526272829// 步骤1:创建HandlerThread实例对象// 传入参数 = 线程名字,作用 = 标记该线程HandlerThread mHandlerThread = new HandlerThread("handlerThread");// 步骤2:启动线程mHandlerThread.start();// 步骤3:创建工作线程Handler & 复写handleMessage()// 作用:关联HandlerThread的Looper对象、实现消息处理操作 & 与其他线程进行通信// ...
Android多线程-实现方式
一. 前言Android多线程的三种使用方式:
二. 基础使用1. 继承Thread类参考:Java 多线程
优点:实现简单。
缺点:局限性大,不适合资源共享,消耗资源。
2. 实现Runable接口参考:Java 多线程
优点:适合资源共享,灵活。
3. Handler参考:有用的Handler
意义:多个线程并发更新UI的同时,保证线程安全。
三. 复合使用”复合“ 的原因是:本质原理都是 Android多线程基础实现(继承Thread类、实现Runnable接口、Handler)的组合实现。
1. AsyncTaskAndroid网络-请求数据
优点:
方便实现异步通信:不需要使用 任务线程 + Handler 的复杂组合。
节省资源:内部采用线程池的缓存线程 + 复用线程,避免了频繁创建和销毁线程所带来的系统开销。
2. HandlerThreadAndroid多线程-HandlerThread
优点:方便实现异步通信:不需要使用 任务线程 + Handler 的复杂组合。
3. IntentServiceIntentService
最常见的情景:离线下载。
四. 高级使 ...
Android多线程-多线程总结
一. 多线程基础知识Android多线程-基础知识
二. 多线程的使用Android多线程-实现方式
三. 其他1. 线程同步:Synchronized关键字Java:手把手教你全面学习神秘的Synchronized关键字
2. 线程变量:ThreadLocalJava多线程:带你了解神秘的线程变量 ThreadLocal
Android多线程-基础知识
一. 关于 Java 的多线程务必参考这篇详细的文章:Java 多线程
二 . Android中的多线程Android官方声明:在多线程编程时有两大原则:
不要阻塞UI线程(即主线程):单线程会导致主线程阻塞,然后出现ANR错误:主线程被阻塞超过5s则会出现错误。
不要在UI线程之外更新UI组件。
问题1解决方法:将耗时任务放在工作线程中进行
对应原则:不要阻塞UI线程(即主线程),即当我们有耗时的任务,如果在UI线程中执行,那就会阻塞UI线程了,必须要抛到工作线程中去执行。
问题2解决方法:将更新UI组件放在主线程中进行
对应原则:不要在UI线程之外访问UI组件,即更新UI组件时,一定得在UI线程里执行,故需要在工作线程中执行的任务结果返回到UI线程中去更新组件。
参考文章Android多线程:你必须要了解的多线程基础知识汇总
算法分析设计-回溯算法
一. 回溯算法(Back-tracking algorithm)1.定义遍历搜索空间并遇阻回溯的算法 -> 暴力求解+遇阻回溯。
遇阻回溯
解空间有结构:
一个解由多个顺序子阶段决策构成。
分阶段构造一个解。
一旦某个阶段的解不可行,后面可以不再继续构造,回溯上一阶段尝试其他构造方式。
二. N皇后问题1.题目描述
2.代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614 ...
Android网络-拓展知识
一. 完善1. 封装请求及通用设置① 封装能用Header
② 请求参数封装
2. 封装结果处理① 能用错误码错误处理
② 数据转换以及校验
二. 拦截请求设置及代理1. Fiddler(Windows)2. Charles(Mac)参考文章:
Charles使用教程
charles教程大全
3. WiFi设置代理三. 小技巧1. Postman查询API2. 了解Restful API
Android网络-OkHttp基本使用
一. 前言1. 关于本地服务器我的选择是使用自己的电脑作为服务器。我们的手机该如何才能访问的电脑呢?
首先,我们需要将我们的手机和电脑连接在同一个局域网下,手机开热点给电脑连接也可以。
接着,我们需要在终端输入 ifconfig,回车,找到 inet,后面的一串数字就是我们本机的ip地址(ip地址可能变动),比如我的电脑此时的ip就是:192.168.43.43。
2. 操作本地服务器12345//开启apache: sudo apachectl start//重启apache: sudo apachectl restart//关闭apache: sudo apachectl stop
前往本地服务器的文件夹:/Library/WebServer/Documents,在其中配置我们的后台文件。
我们电脑访问本地服务器的方式是:http://localhost/hello
在手机上我们对应的访问方式是:http://192.168.43.43/hello
3. 实际操作可能出现的问题程序报错:CLEARTEXT communication to XX not permit ...