Android 基础知识
一、Activity
1、onSaveInstanceState(),onRestoreInstanceState的调用时机
onSaveInstanceState 调用时机
从最近应用中选择运行其他程序时
但用户按下Home键时
屏幕方向切换时
按下电源案件时
从当前activity启动一个新的activity时
onRestorInstanceState调用时机
只有activity确实是呗系统回收,重新创建activity的情况下才会调用。例如:
屏幕方向切换生命周期如下
onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onstart->onRestoreInstanceState->onResume
2、activity的启动模式和使用场景
standard
默认模式,每次启动activity 都会创建一个新的实例
singleTop
一般应用于通知消息打开的页面
如果要启动的activity已经再栈顶,则不会重新创建,指挥调用该activity的onnewintent()方法。
如果要启动的activity不在栈顶,则会重新创建该activity的实例
singletask
一般适用于主页面
如果要启动的activity已经存在于它想要归属的栈中,那么不会创建新实例,将栈中位于该activity上的所有的activity出栈,同事该activity的onnewintent方法会被调用
singleinstance
例如呼叫来电界面
要创建再一个新栈,然后创建该activity实例并压入新栈中,新栈中只会存在这一个activity实例
3、activity之前传递数据的方式intent是否有大笑限制,如果传递的数据量偏大,有哪些方案
有,最好不要超过512k
可以用本地存储,或者缓存等方案进行传递
4、显示启动和隐示启动
显示启动 直接再清单文件写好调用
隐示启动 在清单文件里通过intent-filter 进行name配置,调用时可改成name值进行启动
5、scheme使用场景,协议格式,如何使用
scheme是页面内跳转协议,可以自定义scheme协议
定义格式
使用Uri.parse(“hr://test:8080/goods?goodsid=8888&name=test”)
6、ANR的场景
Service TimeOut 未在规定时间执行完成,前台服务20S,后台200s
BroadCastQueue TimeOut 围在规定时间内处理完广播 前台广播10s,后台60s内
ContentProvider TimeOut publish 在10s内没有完成
Input Dispatching timeout 5s内未响应键盘出入,触摸屏幕等事件
Activity的生命周期回调阻塞并不会直接触发ANR,职不过死循环阻塞了主线程,如果系统有上述情况发生,就无法在相应的时间内处理从而触发ANR
7、oncreate和onsaveinstancestate回复数据时的区别
onrestoreintstancestate 不一定会被调用,因为它只有在上次activity被回收了才会调用
oncreate里的bundle参数可能为空,一定要做非空判断,而onrestoreintstancestate的bundle参数一定不会是空值
二、Service
1、service的生命周期,两种启动方式的区别
startService/bindService
如果服务已经开启,多次执行startService 不会重复执行oncreate,而是会调用onStart和onStartCommand
如果服务已经开启,多次执行bindService时,onCreate和onBind方法并不会被多次调用
startService 不会依赖于调用者,bindService 依赖于调用者
2、service于activity实现通信
通过Binder对象
Service继承Binder的内部类,并添加相应的逻辑方法
或通过BroadCast广播与activity通信
3、IntentService是什么,IntentService原理
IntentService是Service的子类,默认开启了一个工作线程HandlerThread,使用这个工作线程逐一处理所有启动请求,在任务执行完毕后会自动停止服务,只要实现一个方法onHandleIntent,该方法会接受每个启动求救的intent,能够执行后台工作和耗时操作。
三、BroadcastReceiver
1、广播的分类和使用场景
广播分为两个角色,发送着 和 接受着
广播接收器分为两种,静态注册和动态注册
静态通过清单文件的标签申明的BroadcastReceiver
动态通过AMS.registerReceiver的方式注册,动态注册更灵活,可在不需要时通过unregisterReceiver取消注册
根据发送形式分为
1、普通广播:通过Context.sendBroadcast发送,可并行处理
2、系统广播:管使用系统广播时,只需在注册广播接受着时定义相关的action即可,不需要手动发送广播例如:网络变化,锁屏,飞行模式等
3、有序广播:指的是发送出去的广播被BroadcastReceiver按照先后顺序进行接收,发送方式变为sendOrderedBroadcase(intent)。
4、App应用内广播:Android的广播可以跨进程通信
5、粘性广播:由于在5.0已经失效,不建议使用
四、ContentProvider
主要用来是应用间数据共享,提供统一的接口,例如通讯录,通话记录等
五、Handler
1、handler的实现原理
共分为 Handler、Message、MessageQueue和Looper
Handler负责消息的发送和处理
Message消息对象,相当于是实体
MessageQueue消息队列,用于存放消息对象的数据结构
Looper消息队列的处理者,用于轮询消息队列的消息对象
Handler发送消息时调用MessageQueue的enqueueMessage插入一条消息到MessageQueue,Looper不断轮询调用MessageQueue的next方法,如果发现message就调用handler的dispatchMessage,dispatchMEssage被成功调用,接着调用handlerMessage
2、子线程中能不能直接new一个Handler
不能,因为Handler的构造方法中,会通过Looper.myLooper()获取looper对象
3、Handler导致的内存泄露原因和解决方案
非静态内部类和匿名内部类都会隐式持有当前类的外部应用
当activity中使用handler,然后被销毁时还存在未处理或正在处理的消息,就会造成内存泄漏,
解决方式,1、将Handler的子类设置成静态内部类,使用WeakRererence弱引用持有Actiivty实例
2、当外部类结束生命周期时,清空Handler内部消息队列
4、HandlerThread时什么,好处,原理,使用场景
HandlerThread本质是一个线程类,他集成了Thread,有自己的内部Looper对象,通过Looper.loop进行循环,通过获取HandlerThread的looper对象传递给Handler对象,然后再handlerMessage方法中执行异步任务
优势
将loop运行在子线程中处理,减轻了主线程的压力,是主线程更流畅,有自己的消息对列不会干扰ui线程,串行执行,开启一个线程起到多个线程的作用
劣势
由于每一个任务队列逐步执行,一旦队列好事个过长,消息延时
对于io等操作,线程等待不能并发
5、idleHandler使用场景
闲时机制,不占用资源
相关文章:

Android 基础知识
一、Activity 1、onSaveInstanceState(),onRestoreInstanceState的调用时机 onSaveInstanceState 调用时机 从最近应用中选择运行其他程序时 但用户按下Home键时 屏幕方向切换时 按下电源案件时 从当前activity启动一个新的activity时 onRestorInstanceState调用时机 只…...

Linux常用命令_帮助命令、用户管理命令、压缩解压命令
文章目录 1. 帮助命令1.1 帮助命令:man1.2 帮助命令:help1.3 其他帮助命令 2. 用户管理命令2.1 用户管理命令: useradd2.2 用户管理命令: passwd2.3 用户管理命令: who2.4 用户管理命令: w 3. 压缩解压命令3.1 压缩解压命令: gzip3.2 压缩解压命令: gunzip3.3 压缩解压命令: ta…...
解决 KylinOS “Could not get lock /var/lib/dpkg/lock”错误
最近,我遇到了 “Could not get lock /var/lib/dpkg/lock”的错误,我既不能安装任何软件包,也不能更新系统。此错误也与“Could not get lock /var/lib/apt/lists/lock”错误密切相关。以下是 Ubuntu 20.04 上的一些样本输出。 Reading package lists… Done E: Could not…...
PHP pdf 自动填写表单
一、下载github上的项目,地址 二、下载pdftk 地址 // 转化PDF模板 pdftk modele.pdf output modele2.pdf# 填充pdf文件中的表单 require(fpdm.php); $fields array(name > My name,address > My address,city > My city,phone > My phone nu…...
Win2016Server绑定多网卡实现负载均衡
一、服务器端: 1、输入ncpa.cpl打开网络连接,对要绑定的网卡勾掉IPV4,IPV4地址选择自动 2、输入servermanager.exe,打开服务器管理器 3、在 [本地服务器] 中,点后边的 “已禁用” ,在 [适配器和接口] 小窗口…...

微软宣布在 Excel 中使用 Python:结合了 Python 的强大功能和 Excel 的灵活性。
文章目录 Excel 中的 Python 有何独特之处?1. Excel 中的 Python 是为分析师构建的。高级可视化机器学习、预测分析和预测数据清理 2. Excel 中的 Python 通过 Anaconda 展示了最好的 Python 分析功能。3. Excel 中的 Python 在 Microsoft 云上安全运行,…...
学习心得03:OpenCV
数学真是不可思议,不管什么东西,都能用数学来处理。OpenCV以前也接触过,这次是系统学习一下。 颜色模型 RGB,YUV,HSV,Lab,GRAY 颜色转换cvtColor()/convertTo(),通道分离split()&…...

ubuntu学习(五)----读取文件以及光标的移动
1、读取文件函数原型介绍 ssize_t read(int fd,void*buf,size_t count) 参数说明: fd: 是文件描述符 buf:为读出数据的缓冲区; count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文…...

Python 数据分析——matplotlib 快速绘图
matplotlib采用面向对象的技术来实现,因此组成图表的各个元素都是对象,在编写较大的应用程序时通过面向对象的方式使用matplotlib将更加有效。但是使用这种面向对象的调用接口进行绘图比较烦琐,因此matplotlib还提供了快速绘图的pyplot模块。…...

uniapp小程序位置信息配置
uniapp 小程序获取当前位置信息报错 报错信息: getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json 需要在manifest.json配置文件中进行配置:...
《基于 Vue 组件库 的 Webpack5 配置》1.模式 Mode 和 vue-loader
一定要配置 模式 Mode,这里有个小知识点,环境变量 process.env.NODE_ENV module.exports {mode: production,// process.env.NODE_ENV 或 development, }一定要配置 vue-loader Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用; …...

01.sqlite3学习——数据库概述
目录 重点概述总结 数据库标准介绍 什么是数据库? 数据库是如何存储数据的? 数据库是如何管理数据的? 数据库系统结构 常见关系型数据库管理系统 关系型数据库相关知识点 数据库与文件存储数据对比 重点概述总结 数据库可以理解为操…...

视频集中存储/云存储平台EasyCVR国标GB28181协议接入的报文交互数据包分析
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理…...

容器技术,1. Docker,2. Kubernetes(K8s):
目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 容器技术 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使…...
Jtti :sql server怎么备份数据库?
在 SQL Server 中备份数据库是一项重要的操作,它可以确保你的数据在意外情况下得以恢复。以下是在 SQL Server 中备份数据库的基本步骤: 使用 SQL Server Management Studio (SSMS) 进行备份: 打开 SQL Server Management Studio(SSMS)并连接…...

Stable Diffusion 系列教程 | 打破模型壁垒
目录 1.模型基本分类 1.1 CheckPoint 大模型/底模型/主模型 1.2 VAE美化模型/变分自编码器 1.3 HyperNetwork 超网络 1.4 embeddings(/Textual Inversion) 嵌入式向量 1.5 loRa 低秩适应模型 2. 下载途径和渠道 2.1 C站 2.1.1 如何筛选到自己需…...
Cypress 做 e2e 测试,如何在获得某个 checkbox 后先判断它是否被 check 然后再更改它的状态?
比如如果这个 checkbox 已经被 check 了,就不做操作,否则将它 check。 我们假设这个 checkbox 的 data-testid 属性是 VendorCodeCheckbox-0-test-id。Cypress 的代码如下: cy.getByTestId(VendorCodeCheckbox-0-test-id).shadow().find([r…...

基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序)
一、系统方案 1、上电初始化液晶第一行显示脉搏,第二行显示温度,第三行显示模式,第四行显示强度;按下K1按键可以选择模式,催眼模式或治疗模式。 2、治疗模块下,可以通过K2、K3修改强度。 二、硬件设计 原理…...

【C++进阶(一)】STL大法以及string的使用
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 STL标准库 1. 前言2. STL库的版本以及缺陷3. ST…...
leetcode做题笔记99. 恢复二叉搜索树
给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 思路一:模拟题意 int midOrder(struct TreeNode **pre, struct TreeNode **err1, struct TreeNode **err2, struct TreeNo…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...