27安卓线程

Android 13+ 拍照音卡顿排查:Perfetto 定位 27ms Uninterruptible Sleep 根因 本文深入分析了Android 13+设备在暗光环境下拍照音卡顿问题,通过Perfetto工具链定位到27ms Uninterruptible Sleep状态的根因。文章详细介绍了音频子系统与相机子系统的资源竞争问题,并提供了内核层、框架层和HAL层的优化方案,显著降低了音频延迟,提升了用户体验。 阅读详情

Android 单线程模型

======================================

*所有的界面显示,用户操作,组件的控制

必须在主线程中执行


Android 线程通信

============================

*在工作线程中(自己启动的线程)要更新界面显示

要向主线程发送消息(不能再自己的线程中tv.setText())要与主线程通信.


ANR

============================

*Application Not Responding

应用无响应


*主线程执行时,程序阻塞在一段代码当中

主线程无法更新界面显示,

也无法响应用户的操作


*用户在界面点击后,5秒无响应,就会弹出ANR Ctrl 


=====================================

工作线程做ui更新操作时异常:

Only the original thread that created a view hierarchy can touch its views.


Handler

======================================

*向关联的Looper发送消息

Looper 在处理消息时,再回调Handler处理


创建实例

-------------------------------

1,持有当前线程的Looper

Handler handler=new Handler()

2,由重写的方法处理消息

Handler handler=new Handler()

{

重写handleMessage(Message msg)

}


3,Message.obtain()(静态方法创建),new Message()区别在于obtain可以获得之前创建过的消息(缓存中),而不新建对象,减少开销.提高性能.


Message.obtain(handler,1,2).sendToTarget(); == sendToTarget()内部实现handler.sendMessage(this)

不用调用handler.sendMessage(message) 直接点.

====================================

Handler 也有一个obtainMessage(....)可以直接创建一个message对象

-------------------------------------------------------------------------------------------------------

Message

============================

int what想干嘛

int art1自定义参数

int arg2自定义参数

Object obj 任意对象


方法

---------------------------------

setData(Bundle bundle)放键值对的数据

getData()

Bundle本质是哈希表

存放一组键值对数据


set Target(Handler handler)

getTarget() 访问关联的Handler对象


*发送消息

handler.sendMessate(msg)

handler.sendEmptyMessage(what)

handler.post(Runable)

msg.sendToTarget()//消息中包含一个Handler对象可以直接发送


*处理消息

1,在Message上外接一个Runable回调

2,在Handler上外接一个Callback回调

3,重写 handleMessage()




***主线程会维护一个messae(queue)  looper不断处理.

工作线程调用handler.sendMessage   把消息放到queue中等待处理当处理到放入的message时毁掉handler的handlemessage方法(需要自己实现)  


****4.0之后网络的连接必须在工作线程中


Looper处理消息

while(true)

{

Message msg=queue.next();

Handler h =msg.getTarget();//发送消息的Handler对象

h.dispatchMessage(msg)//将消息取出来发回handler处理

}


Handler.dispatchMessage(msg)解析 

Handler.dispatchMessage(msg);
    if (msg.callback!=null)
{
    msg.callback.run();
}else
{
    if(this.callback!=null)
    {
        boolean b=this.callback.handleMessage(msg);
        if(!b)//如果是真就只执行这段代码,如果是假会执行handler里面的handleMessage
        {
            this.handleMessage(msg);
        }
    }else
    {
        this.handleMessage(msg);
    }
}
*****
dispatchMessage(Message msg) 
Looper处理消息时调用Handler的dispatchMessage方法

此方法内部逻辑:

	1,存在msg的回调对象,执行回调对象不执行其它回调.
	2,在Handler上存在回调对象,执行回调
	2.1,该方法返回true结束
	2.2,该方法返回false执行重写测handleMessage()
	3,以上两个回调对象都不存在
		直接执行重写的handleMessage().


=====================工作线程中通过Looper接受处理消息==================================

Looper.prepare();
创建消息队列
并创建Looper实例,
然后将Looper实例绑定到当前线程

handler	=new Handler()//关联当前线程的handler

从当前线程获得Looper,Handler会持有该looper对象
Looper.loop();
进入死循环,
等待其他线程向当前线程发送消息
Looper
====================================
*会绑定到当前线程
*loop()执行一个死循环,从队列获取消息处理
looper.prepare()	在当前线程中创建消息队列,并实例化一个新的looper对象
looper.loop()		开始死循环轮回处理消息

looper.getMainLooper()	获得主线程(UI 线程)Looper
looper.myLooper()	获得当前线程Looper

myQueue()		获得当前线程消息队列
setMessageLogging(Printer printer)//LogPrinter

HandlerThread t 启动一个工作线程接收处理消息.

===============================================













**

Android学习日记 2021.2.27 星期六 // TODO 2/27 // 标识符 字母数字下划线$组成 不能数字开头 区分大小写 // 关键字 // 变量 变量类型 变量名 驼峰法 变量值 // 类 Pascal 首字母大写 // 数据类型 数值 整数byte short int long 浮点float double 字符char 布尔boolean 类class 接口interface 数组 // 整型字面值 八进制 037 十六进制 0XA1 // 变量声明 int n; 整形变量 long count; 长整 阅读详情

相关推荐

Android开发必备:PDFBox 2.0.27.0实战教程,从加载到注释全流程解析

本文为Android开发者提供了PDFBox 2.0.27.0的深度实战教程,详细解析了从项目集成、环境配置到PDF文档加载、信息提取及添加注释的全流程。重点分享了在Android平台上处理PDF时的内存管理、线程安全等最佳实践与性能优化策略,帮助开发者构建健壮的PDF处理功能模块。

jenkins8butler的博客 225

Android 中 Handle的使用和源码详细分析

文章目录1、Handle在Android中的作用2、 Handle的实现机制3、Handle的具体使用3.1 子线程发消息给UI线程3.2 UI线程发消息给子线程4、handle 源码看看`源码分析一:``源码分析二:` Looper.myLooper();`源码分析三:` Looper.prepare();`源码分析四:` new Looper(quitAllowed)`源码分析五:` ...

苏打水解渴的博客 1138

Android开发必备:PDFBox 2.0.27.0实战教程,从加载到修改PDF全流程

本文为Android开发者提供PDFBox 2.0.27.0的深度实战教程,涵盖从项目集成、内存优化到文本提取、页面修改和高级注释的全流程。重点解析了在移动端高效、稳定处理PDF的核心技术,包括如何避免常见崩溃、优化性能以及处理加密文档等关键实践,帮助开发者构建功能强大的PDF处理功能。

nft7creator的博客 196

搭建一个protractor项目

首先已经安装好node.js与jdk了,再搭建protractor; 参考资料:https://www.cnblogs.com/haogj/p/4815673.html 在这里说明主要步骤:可以去protractor 1.运行npm install -g protractor 此命令同时安装protractor与webdriver-manager ;后者是为了管理所有的webdriver

wangmiaoyan的博客 554

利用RKNN零拷贝API优化YOLOv5安卓应用性能

本文详细介绍了如何利用RKNN零拷贝API优化YOLOv5在安卓设备上的性能表现。通过减少CPU与NPU之间的内存拷贝操作,显著提升推理速度与NPU利用率,特别适用于实时视觉处理与边缘计算场景。文章包含环境配置、Demo解析、性能对比及实战优化技巧,帮助开发者实现从Demo到产品的关键跨越。

weixin_29046611的博客 226

爬取二手房数据:Python爬虫+Geopy实战,看透房价与地理位置的隐藏关系

哪些区域单价虚高(房源少但单价远高于周边);哪些小区性价比高(靠近地铁/学校,单价低于同地段平均水平);房价与地理位置的量化关系(如距离地铁每远1公里,单价下降多少)。如果想扩展分析范围,可爬取多个城市/区域的数据,对比不同城市的房价差异;或结合时间维度(定期爬取),分析房价的涨跌趋势。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 950

1.5.27 Android 线程 Handler介绍

  一、Handler的定义:          主要接受子线程发送的数据, 并用此数据配合主线程更新UI.          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如:...

u012913404的专栏 430

VC Spyglass CDC实战:从TCL脚本到SDC约束的完整避坑指南

本文是一份针对数字IC验证工程师的VC Spyglass CDC实战指南。文章详细阐述了从TCL脚本环境搭建、SDC约束编写到典型CDC违规(如SETUP_PORT_UNCONSTRAINED)诊断与修复的完整流程,旨在帮助读者高效避坑,深入理解工具逻辑,从而完成可靠的时钟域交叉验证。

go5gopher的博客 385

Android学习札记27:对线程更新UI界面的一些理解(1)

当第一次启动一个Android程序时,Android会自动创建一个被称为“main”主线程的线程。这个主线程(也称为UI线程)很重要,因为它负责把事件分派到相应的控件,其中就包括屏幕绘图事件,它同样是用户与Andriod控件交互的线程。比如,当你在屏幕上按下一个按钮后,UI线程会把这个事件分发给刚才按得那个按钮,紧接着按钮设置它自身为被按下状态并向事件队列发送一个无效(invalidate)请求。

L_YQing的专栏 1971

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文详细介绍了秦时明月6.2魔改版的从零到一部署指南,包括环境准备、服务端安装、安卓客户端配置以及GM后台直通等关键步骤。特别针对安卓客户端配置和GM工具使用提供了实用技巧,帮助用户快速搭建并优化游戏服务器,确保稳定运行。

weixin_42522964的博客 317

【CIC-IDS数据集+机器学习】实现网络流量异常检测

本项目基于CIC-IDS数据集,使用多种机器学习算法实现网络流量异常检测系统。项目采用了完整的机器学习工作流程,从数据预处理到模型部署,实现了高精度的网络入侵检测。

XiaoMu_001的博客 1936

Android开发手记(27) Java多线程的操作

Java中常用的有关线程的操作有,判断线程是否启动、线程强制执行、线程休眠、线程中断、线程让步、线程同步等。下面就一一举例。 首先,我们新建一个MyThread类实现Runnable接口。基于此接口进行线程的相关操作。 class MyThread implements Runnable { public void run() { for (int i = 0...

weixin_30375247的博客 93

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4511

Android 开发工具类 27_多线程下载大文件

多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import java.io.File; 4 import java.io.RandomAccessFile; 5 import java.net.HttpURLCon...

weixin_30851867的博客 187

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1634

YOLOv13改进策略【YOLO和Mamba】| 替换骨干 Mamba-YOLOv13-T !!! 最新的发文热点

模块是模型中的一个重要组成部分,其主要作用是在模型的初始阶段对输入图像进行处理,方便后续的特征提取和目标检测。以下是对。

Limiiiing的博客 355

关于子线程操作view的一些实践分析

问题点: 最近在做与H5的交互中发现,通过@javascriptInterface提供的接口是运行在子线程中,但是在子线程中却能够操作View,这个有点颠覆了我学Android以来的认知,子线程不能更新view 于是写了demo做了几个实现,demo使用的sdk,目前测试过android-21,android-25和android-27 demo很简单,就是新建一个子线程,分别在里面作如下操...

ml870353701的专栏 1357

论文分栏前后内容不连续?教你word如何删除分节符

问题 当我们在写论文的时候,很多期刊的模板都是两栏的格式,但有的时候我们插入的图像尺寸可能太大,两栏格式放不下,因此需要将其以一栏的格式出入,如下: 但当我们把图片删除后,再将其转换成两栏格式,前后内容就出现不连续的情况: 正常情况下应该是如下: 正确处理方式 里面有个分页符,把分页符去掉,或者把你的文字全部复制到记事本里,然后重新复制回word就可以取消原有的格式了。 删除分节符的方法(以word 2019为例) -点击菜单栏上的“视图”,点击“大纲视图”。 可以看到word文档以整列的形式展开:

左手の明天的博客 1万+

深入Android架构(从线程到AIDL)_27 Messager框架与IMessager接口03

3、 双向沟通的Messenger框架 基本設計原則 4、 IMessenger接口 使用AIDL

soarfeng的专栏 805

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[译] 支持库 27,Android开发社招面试解答之性能优化

id)**[外链图片转存中…(img-AdhTo6vg-1710986531323)]

m0_60721860的博客 347

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[译] 支持库 27(1),Android自学,android视频开发面试

一开始,Loader 和 Fragment 紧紧的联系在一起。这意味着,为了支持 Loader,在 FragmentActivity和 Fragment中有许多的代码,然而事实上他们几乎没有关联。这也意味着和 Activity、Fragment 以及架构组件相比,Loader 的生命周期和保障是完全独特的且受制与它那有趣且激动人心的行为差异和 bug。

m0_62289824的博客 388

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

车载信息娱乐系统Java代码审查清单(含27项功能安全检查项+静态分析规则配置模板)

提供Java车载信息娱乐系统开发的标准化代码审查方案,覆盖27项功能安全检查与静态分析规则配置模板,适用于AUTOSAR兼容系统及车规级Java模块。提升代码可靠性与合规性,降低ASIL-B/C级风险,值得收藏。

FuncIsle的博客 316

关于ble bluetooth notify/incate返回数据失序的讨论帖子

Notifications can be received out of order on Android:https://github.com/don/cordova-plugin-ble-central/issues/625 How could i achieve maximum thread safety with a read/write BLE Gatt Characterist...

chenm91的专栏 505

刚踩一个大坑,求个高人指点(已解决)

android链接mysql出现Could not create connection to database server.但是java正常

xxsunxx的博客 2219

27道 Handler 经典面试题,你能答出多少?,后端开发工程师面试题

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。一个人可以走的很快,但一群人才能走的更远。

2401_84102979的博客 433

字节跳动面试真题:2021大厂Android面试经历,积累总结

什么是中年危机 根据权威数据显示,国内IT程序员鼎盛时期是在25-27岁左右,30岁对于程序员而言完全是一个38线,接着就是转业转岗的事情,这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右,然而22-30岁之间也就是8年左右的时间,那么27岁也就是职业生涯“中年”的开始,那么作为程序员的你有准备好如何度过“中年危机”吗? 当程序猿到了28岁左右的“中年危机”就不一样了,这个年纪也是程序猿们工作积累的高峰期,有的程序猿已经换了好几份工作,也有的程序猿们一直在一家企业做了好几个大型项

m0_57066131的博客 278
上一篇: day--27 Java线程
下一篇: day28安卓线程
AverageJoe24
博客等级 码龄13年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值