`

UI线程的setContentView的会等到Runnable.run()处理完之后才会执行

 
阅读更多

    今天做安卓关于Handler、Thread、Runnable开发,看到一个问题。

    安卓里Handler这些东西引进,本身就是为了防止一些耗时操作阻塞主线程,所以你重新用一个线程工作的时候,如下两种方式:.

Handler netHandler = new Handler();
Runnable netRunnable = new Runnable();
1.(声明:方法一并不会创建新的线程)
netHandler.post(netRunnable);
2.
Thread thread = new Thread(netRunnable);
thread.start();

       这样“创建”新线程中,就算线程的run()函数中有sleep,主线程的一般操作,也不会受影响,例如代码中那句 System.out.println("this is main thread!")是会立即打印的。

       但是特别的是,如果主线程的  setContentView(R.layout.main);  在“创建”线程之后的话,即如下代码:

		netHandler.post(netRunnable);
//		Thread thread = new Thread(netRunnable);
//		thread.start();
		System.out.println("this is main thread!");
		setContentView(R.layout.main);

 

布局文件是会延迟加载的,即在“新的线程”执行完之后才会加载,这是为什么呢?

分享到:
评论

相关推荐

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    ### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...

    android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。

    它可以在Android主线程中执行任务,避免了在其他线程中更新UI的操作导致的线程安全问题。Handler主要有两个核心方法:`sendMessage`和`handleMessage`,用于发送和处理消息。但在实现延时任务时,我们通常会使用`...

    Android 多线程学习资料

    主线程(UI线程)负责处理用户交互和绘制界面,因此任何耗时操作如网络请求、数据库操作都不应在主线程中执行。Android提供了多种实现多线程的方式,如AsyncTask、IntentService、Thread和Handler等。 主线程通过...

    Handle.线程问题

    由于Android系统为了确保用户界面的响应性和流畅性,强制所有与用户界面相关的操作都必须在主线程(也称为UI线程)中执行,因此对于那些耗时的操作如网络请求、大数据处理等,就需要放到子线程去执行。然而子线程...

    新启一个线程

    这样可以避免这些操作阻塞主线程(也称为UI线程),从而导致应用界面卡顿或无响应。下面将详细介绍如何利用Handler机制在Android中实现异步任务处理以及UI刷新。 #### Handler机制详解 Handler机制是Android中进行...

    Android中线程间通信.pdf

    这是因为在Android中,默认情况下UI操作是非线程安全的,这意味着它们只能在一个特定的线程(即UI线程)中被安全地执行。 #### 三、单线程模型的重要性 理解单线程模型对开发者来说至关重要。如果在设计程序时不...

    android 多线程

    假设我们需要在一个非UI线程中执行一些耗时的操作,并在完成后更新UI: ```java public class MainActivity extends AppCompatActivity { private Handler mHandler = new Handler(Looper.getMainLooper()) { @...

    android Handler详细使用方法实例

    4. 如果需要更新UI,必须在UI线程中创建Handler,Handler的消息回调方法也会在UI线程中执行。 在给定文件中提到的实例1,详细描述了一个具体的使用场景和实现过程: - 实例1的目的是演示如何在Android中通过...

    android里如何在子线程中如何更新主线程的控件

    在Android应用开发中,由于Android系统的UI线程安全机制,所有与用户界面交互的操作都必须在主线程中进行。这意味着,如果你在子线程中尝试修改任何UI元素,如文本、图片或者布局,系统会抛出`android.os....

    android 线程操作进度展示辅助类

    Android UI线程,也称为主线程,负责处理用户界面的绘制和事件响应。为了不阻塞主线程,耗时操作应放在工作线程(也叫子线程)中进行。工作线程可以通过AsyncTask、Thread、Handler、Runnable或ExecutorService等...

    Android多线程示例代码

    这样做的主要目的是避免阻塞UI线程(主线程),因为UI线程负责处理与用户界面相关的所有操作,如果它被长时间占用,会导致应用响应变慢甚至崩溃。 #### 三、示例代码分析 下面我们将逐步分析给出的示例代码: ####...

    android多线程

    - 主线程中的`Handler`会处理这个消息,并更新UI。 #### 三、解析异步消息处理机制 **图2.1 异步消息处理机制流程** 1. **消息发送**: 当需要在子线程中执行某项任务并最终更新UI时,可以创建一个`Message`对象并...

    Android线程操作 handler demo

    当我们需要执行耗时操作,如网络请求、数据库操作或大量计算时,我们不能在主线程(UI线程)上进行,以免阻塞用户界面,导致应用无响应。此时,Android提供了多种多线程解决方案,其中之一就是Handler机制。本篇将...

    Android Handler 线程 示例代码

    `Handler`是Android中用于线程间通信的重要工具,特别是在主线程(UI线程)与工作线程之间。它允许开发者发送和处理`Message`或`Runnable`对象,使得在不同线程间传递数据和执行操作成为可能。在描述中提到的进度条...

    android 线程间通信

    Android应用程序通常运行在单个主线程上,称为“主线程”或“UI线程”。为了提高应用性能和用户体验,开发者经常需要利用多线程技术来执行后台任务,比如下载图片、获取网络数据等。然而,这些后台线程不能直接更新...

    Eclipse编写的Android数字时钟应用实例(用新建Runnable的方法)

    `Runnable`是Java多线程编程的核心组件,它允许我们定义一个可执行的任务,然后在不同的线程上运行。 首先,我们需要创建一个新的Android项目,并在`main.xml`布局文件中添加一个TextView,用于显示数字时钟的时间...

    android handler理解

    - 当Android应用程序启动时,系统首先会启动一个主线程(即UI线程),该线程负责管理界面中的UI控件并进行事件分发。 - 如果在这个主线程中执行耗时操作(例如网络请求或大文件读取),可能会导致UI界面卡顿甚至...

    android Handler子线程计算斐波那契数列

    在Android中,由于主线程负责处理用户交互,不应在主线程中执行长时间运行的任务,以免阻塞UI,所以我们将计算任务放在子线程中。Handler则扮演了协调者的角色,它接收并处理子线程发送的消息。 以下是使用Handler...

Global site tag (gtag.js) - Google Analytics