每天记录学习的新知识 : 什么是主线程?

参考地址

参考地址:Android 主线程到底是什么、如何抛出ANR

参考地址:ActivityThread的理解和APP的启动过程

主线程和线程

什么是主线程?

当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread),因为它是程序开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。

主线程的重要性?

  1. 是产生其他子线程的线程;
  2. 通常它必须最后完成执行比如执行各种关闭动作。

主线程是线程?

参考地址:Android主线程(ActivityThread) 其实不是线程,只是一个普通类

主线程是线程,但是ActivityThread虽然代表着主线程,却不是真正的线程,真正的线程应该是由Process创建。
ActivityThread这个类运行在Process创建的线程上。

进程和主线程的关系?

进程

都是由zygote孵化的,基于虚拟机运行的。
应用中如果我们不申明进程的话,那么应用默认只会有一个进程(进程名:默认包名);

主线程

进程会加载ActivityThread.java类,并执行它的main函数,自此,主线程操作从main函数开始执行了。

因此,我们知道主线程和进程是一一对应的关系。

为什么说Android是单线程模型?

什么是单线程模型呢?

单线程模型指的是,只在一个线程上运行。也就是说同时只能执行一个任务,其他任务都必须在后面排队等待

Android是单线程?

Android不是完整意思的单线程,我们都知道Android可以创建子线程,但是对于UI线程来讲,模型设计遵循单线程模式

Android单线程的描述?

Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行

为什么要用单线程模型?

系统设计的最终选择都是经验积攒过后的权衡之策

Android单线程模型优势?

单线程化的GUI框架通过限制来达到线程安全:所有GUI中的对象,包括可视组件和数据模型,都只能被事件线程访问。

为什么只能主线程刷新UI?

因为线程安全,Android只能主线程刷新UI。

代码角度分析什么只能主线程刷新UI?

android.view.ViewRootImpl中存在

void checkThread() {
	if(mThread!= Thread.currentThread()) {
		throw newCalledFromWrongThreadException(
		"Only the original thread that created a view hierarchy can touch its views.");
	}
}

会校验当前线程是不是主线程,如果不是主线程,就会异常。

详情参考地址:Android中为什么在子线程不能更新UI

你可能感兴趣的:(#,Android,基础知识,线程,主线程是什么)