Android 多线程机制

编程入门 行业动态 更新时间:2024-10-22 09:29:16

Android <a href=https://www.elefans.com/category/jswz/34/1767532.html style=多线程机制"/>

Android 多线程机制

多线程操作数据需要使用同步

public class CustomThread extends Thread {private Runnable runnable;synchronized void setTask(Runnable runnable) {this.runnable = runnable;}@Overridepublic void run() {while (true) {synchronized (this) {if (runnable != null) {runnable.run();runnable = null;}}}}
}

ThreadLocal 给每个线程独立空间,且不会被共享出去

Loop.myLoop()获取当前loop,内部实现是 mThreadLocal.get() 获取当前线程的loop

Loop.getMainLoop() 获取主线程Loop

变量为 ThreadLocal<Loop> sThreadLocal = new ThreadLocal()

Android 主线程其实就是HandleThread

Loop.loop 是个死循环

for(;;){

Message msg = queue.next();

//处理

msg.target = Handler 每个消息都要hanlder处理

       dispatchMeaasge (Message msg){

//判断有没有CallBack

//处理callback

else

//处理

}  

      

}

一个Loop可以有多个Handle

Handle 机制是在指定的运行中的线程中执行代码

线程间交互并不存在真实的交互,而是通过共享资源来进行的

通过HandleThread.post可以插入一个任务

AsyncTask 内存泄露 ,如果AsyncTask不加static 会一直持有使用它的类的引用,导致不能被Gc回收

内部类都会持有外部类的引用 可以使用WeakReference<> 弱引用持有

System.gc 有一个条件就是正在执行的线程/静态对象/直观的引用 不会被回收

Thread / Handle/Runnable 也可能会导致内存泄漏

后台处理优先使用Execute和HandleThread 几乎没什么区别 HandleThread是单线程

IntentService 是一个Service /比较重 引用多

Service - IntentService

Service 后台活动的空间,

IntentService-需要上下文Context 则使用

Android Performance Patterns

更多推荐

Android 多线程机制

本文发布于:2023-11-15 17:07:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1603219.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多线程   机制   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!