本文一切从简,将围绕一下流程展开叙述:
A[what]-->B[why] B-->C[how] C-->D[analyze]
接触Android的朋友都知道Handler机制用于多线程方面的通信,这好像是一句废话。
我们知道java几个具有代表性的多线程通信方法,例如以下:
Java中每个类都是Oject的子类(万物皆对象,滑稽~~),也就继承Oject的”wait()”和”notify()”方法特性。简单举例说明:两个线程中,对于某Oject对象a,在线程1中执行wait(),线程1则一直处于阻塞中,直到在线程2中执行notify(),线程1才被唤醒继续执行。
多个线程共享一个变量,通过上锁( synchronized关键字 )限制线程们对该变量的访问,谁拿到锁,谁便可以对变量进行修改,待其他线程拿到锁访问该变量时,根据变量的变化作出相应的处理,以达到通信的目的。
嗯,上述方法都是利用线程阻塞的方式进行通信。这若在Android中使用?你得先搞清楚3个问题:
1.Android中多线程通信是为UI线程(主线程)+其他线程(子线程)的交互服务的。
2.基于问题1,Android的UI线程不允许阻塞,否则会造成”ANR”
3.基于问题2,为避免”ANR”,Android中所有的耗时操作(如网络请求,文件读写)须在子线程中完成,并通知进度或结果给主线程用于更新UI。
如对本文有疑问, 点击进行留言回复!!
Xamarin 安卓 相机 各种坑 目标API Android 6以后,我选的目标API版本是 Android 10
Android 9.0+软件某些功能突然暴毙:cleartext not permitted
Android : Resource is not a Drawable (color or path)
Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
网友评论