android面试总结

本文深入探讨了Java面向对象编程、基本数据类型、继承与接口、泛型、集合框架以及线程安全等内容。详细讲解了Android应用生命周期、组件如Activity、Fragment和服务,以及线程间的通信方式如Handler和AsyncTask。同时,提到了Kotlin的协程特性及其在并发中的应用,并对比了Java的单例模式。此外,还涵盖了文件读写、SQLite数据库和ContentProvider在Android中的使用,以及BroadcastReceiver实现进程间通信。

java
面向对象
object

基本数据类型
int short long
double float
boolean
char
byte

继承extends
单继承

接口 interface
多实现

抽象 abstract

泛型
泛型方法 <>方法
泛型变量 T t,E t ,K k
返回值类型是一个泛型

集合
map
abstractmap、hashmap、sortedmap/treemap、Linkedmap
hashtable

set
hashset、treeset
栈stack先进后出
队列 queue先进先出

线程安全类 synchronized 同步锁
stringbuffer、hashset、synchronizemap

文件读写
读取文件,输入流
inputstream,bufferReader,FileInputStream、
InputstreamReader
RandomAccessReader

数据写入文件,输出流
outputstream
bufferWriter
FileOutputStream
OutStreamWriter

android原生
activity
oncreate、onstart、onresume、onpause、onstop、ondestoty

onpause—onresume
onstop—onrestart

standard、singletask、singletop、singleinstance
taskaffinity亲和性

fragment
onAttach
onCreate
onCreateView
onActivityCreated
onstart
onresume

onpause
onstop
onDestroyView
onDestrory
onDeatch

service
startservice
oncreate
onstartcommond
ondestroy

bindservice
oncreate
onbind
onunbind
ondestroy

contentprovider
sqlite,进程间通信,app读取系统联系人信息

broadCastReceiver
应用内广播 本地广播
全局广播
静态注册
动态注册、需要解注册,避免内存泄漏

android多线程之间的通信方式
主线程、子线程
new Thread,runnable
线程池
AsyncTask 前中后主线程更新UI,
onpre、doinbackground—publishprogress后台执行
onprogressupdate
onpost更新UI

handler sendmessage、sendemptymessage、
post、postdelay、postAtTime、sendMessageAtTime、sendmessagedelay
将消息插入队列(默认按照先后顺序,当然也可以插队)

message持有这个handler

Looper 从头循环这个队列,取出当前排队到时间需要处理的message
也就是执行Loop.loop() 死循环取出消息分发给handler处理

一个线程只有一个Looper(threadlocal单例),
一个Loop只管理一个消息队列Messagequeue,
一个线程可以new 多个handler,即所有handler公用这一个messagequeue

loop() 底层使用了linux pipe/epoll机制,有任务处理任务,没有任务休眠,释放CPU,等待下一次唤醒,不会阻塞主线程。

msg==null ||
when=0 ||
msg.when<when
插入消息队列的第一位

APP常用框架

flutter

kotlin

协程

这个协成并发是不是可以理解成,
如果coroutineScope 里面的多个子协程,依旧是按照顺序从上到下执行,第一个子协程里面有挂起suspend 方法,
会跳出当前执行协程代码块,执行后面的代码,等suspend有返回,继续切回到第一个协程执行。

1、GlobalScope.launch 是非阻塞的 ,可以返回Job
2、runBlocking 是阻塞的
3、多个 withContext 任务是串行的,一般用来切换线程执行不同的任务

4、 多个 async 任务是并行的,async 返回的是一个Deferred,需要调用其await()方法获取结果

5、suspend方法必须写在另一个suspend方法或者协程代码块中 , 并且最终都是在协程中执行

kotlin单例,对比java
饿汉
懒汉
懒汉线程安全
double check 双重判空
静态内部类方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值