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使用场景

闲时机制,不占用资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/59620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【线程同步】AQS抽象排队同步器(AbstractQueuedSynchronizer)

AQS(AbstractQueuedSynchronizer)抽象排队同步器 AbstractQueuedSynchronizer AQS就是AbstractQueuedSynchronizer类 AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor&#…

用变压器实现德-英语言翻译【01/8】:嵌入层

一、说明 本文是“用变压器实现德-英语言翻译”系列的第一篇文章。它引入了小规模的嵌入来建立感知系统。接下来是嵌入层的变压器使用。下面简要概述了每种方法,然后是德语到英语的翻译。 二、技术背景 嵌入层的目标是使模型能够详细了解单词、标记或其他输入之间的…

实验室的服务器和本地pycharm怎么做图传

参考 远程调试 qt.qpa.xcb: could not connect to display, echo DISPLAY为空[已解决]_功夫小象的博客-CSDN博客 先安装x11 MobaXterm x11-forwarding_C--G的博客-CSDN博客 我是在容器中搞得 1,安装qt5 pip install PyQt5 -i https://pypi.douban.com/simple …

登录页面设计的7个小细节,帮你提升用户体验

移动 APP 登录页面的设计直接影响到用户体验,从而决定 APP 的成败。我们应该设计出令用户兴奋而不是沮丧的登录界面。下面就让我和你分享几个提升登录页面 UX 设计的技巧: 如果用户必须登录才能使用服务,那么需要仔细考虑登录表单。 在构建登录页面设计…

Nuxt3打包部署到Linux(node+pm2安装和运行步骤+nginx代理)

最近,我们项目组的工作接近尾声,需要把项目部署上线。由于前端第一次使用Nuxt3框架,后端也是第一次部署Nuxt3项目,所以刚开始出现了很多问题。在我上网搜索很多教程后,得到了基本的流程。 1.服务器安装node.js环境 N…

华为鲲鹏服务器

1.简介 鲲鹏通用计算平台提供基于鲲鹏处理器的TaiShan服务器、鲲鹏主板及开发套件。硬件厂商可以基于鲲鹏主板发展自有品牌的产品和解决方案;软件厂商基于openEuler开源OS以及配套的数据库、中间件等平台软件发展应用软件和服务;鲲鹏开发套件可帮助开发…

深入解析SNMP协议及其在网络设备管理中的应用

SNMP(Simple Network Management Protocol,简单网络管理协议)作为一种用于网络设备管理的协议,在实现网络设备的监控、配置和故障排除方面发挥着重要的作用。本文将深入解析SNMP协议的工作原理、重要概念和功能,并探讨…

C++自创题目——第一期

一、题目描述: 在一段时间内,到达港口的船有n艘,其中每艘船的信息包括:到达时间t(表示第t秒),船上乘客数k,以及k名乘客的国籍。输出前3600s内每艘船上国籍种数,并输出国籍种数最少的船只的到达时间。 二、…

docker使用harbor进行镜像仓库管理演示以及部分报错解决

目录 一.安装harbor和docker-compose 1.下载 2.将该文件修改为这样,修改好自己的hostname和port,后文的用户和密码可以不改也可以改,用于登录 3.安装 二.修改daemon.json文件和/etc/hosts文件 三.使用powershell作windows端域名映射 四…

【ArcGIS Pro二次开发】(63):批量更改字段别名

在我工作中遇到的大多数图斑,字段名称一般是英文,字段别名是中文,使用起来是比较方便的。 但有时候也会遇到一些不一样的情况,不知是经过了怎样的处理,图斑的字段别名被修改成了和字段名称一样的英文,这样…

[JAVA学习笔记]常用类

String类: 一、存放位置: 字符串对象创建好后不能修改 String是引用数据类型,但是这里作为方法参数传递的时候,效果跟基本数据类型是一样的。也就是说在堆中创建出来的字符串”monkey”是不能被改变的,如果…

ThinkPHP 资源路由的简单使用,restfull风格API

ThinkPHP 资源路由的简单使用,restfull风格API 一、资源控制器二、资源控制器简单使用 一、资源控制器 资源控制器可以轻松的创建RESTFul资源控制器,可以通过命令行生成需要的资源控制器,例如生成index应用的TestR资源控制器使用&#xff1a…

cyclictest stress 工具 使用

工具介绍 1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。 它可以测量由硬件、固件和操作系统引起的实时系统延迟 2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行…

【车载雷达信号处理】利用sinc函数实现扣点

针对信号处理流程中多次FFT输出的频谱结果,在特殊的场景下,可能存在针对某一特定频点的固定"虚警",所以针对某一个特定频点进行“扣点”的操作是常有的信号处理流程需求。不仅如此,针对最大能量值的扣点也能在不适合使用…

基于白冠鸡算法优化的BP神经网络(预测应用) - 附代码

基于白冠鸡算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于白冠鸡算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.白冠鸡优化BP神经网络2.1 BP神经网络参数设置2.2 白冠鸡算法应用 4.测试结果:5.Matlab代…

【C++】SLT——Vector详解

本片要分享的是关于STL中Vector的内容,Vector的内容于string非常相似,只要会使用string那么学习Vector时会非常流畅。 目录 1.vector介绍 2.vector的简单实用 2.1.简单的无参构造 ​编辑2.2.简单带参构造 2.3.迭代器区间初始化 2.4.vector的遍历 …

C/C++ 个人笔记

仅供个人复习, C语言IO占位符表 %d十进制整数(int)%ldlong%lldlong long%uunsigned int%o八进制整型%x十六进制整数/字符串地址%c单个字符%s字符串%ffloat,默认保留6位%lfdouble%e科学计数法%g根据大小自动选取f或e格式,去掉无效0 转义符表…

C语言程序设计——小学生计算机辅助教学系统

题目:小学生计算机辅助教学系统 编写一个程序,帮助小学生学习乘法。然后判断学生输入的答案对错与否,按下列任务要求以循序渐进的方式分别编写对应的程序并调试。 任务1 程序首先随机产生两个1—10之间的正整数,在屏幕上打印出问题…

基于vue和element的脚手架【vue-element-admin 和vue-element-plus-admin 】

vue-element-admin vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现 介绍 | vue-element-adminA magical vue adminhttps://panjiachen.github.io/vue-element-admin-site/zh/guide/ vue-element-plus-admin vue-element-plus-admin 是一…

如何在Windows / Mac / iPhone / Android / Online上将MP4转换为MP3

如果只想保留MP4视频的音频轨道,则可以将MP4转换为MP3格式。 MP3是几乎所有设备,播放器和编辑器都支持的数字音频格式。无论您将MP4视频转换为MP3音频以进行脱机播放或进一步编辑,都可以提取音轨并保存为MP3格式。这是在不损失质量的情况下将…