1、注意:

(1)子线程需要切换到UI线程或者主线程去更新线程。

(2)但是子线程单独也是可以更新UI的,只是谷歌要求我们需要到UI线程去更新。

eg:

   @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread_update_ui);
new Thread(new Runnable() {
@Override
public void run() {
textView.setText("子线程更新ui");
}
});
}

此时我们运行发现,程序没有任何问题。

eg:

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread_update_ui);
new Thread(new Runnable() {
@Override
public void run() {
textView.setText("子线程更新ui");
Thread.sleep(5000);
}
});
}

当我们在里面添加耗时操作的时候,我们会发现程序崩溃。

原因:在oncreat()方法中,此时viewRootlmp还没有被创建。viewRootlmp在Activity处于onResume之后才被创建的,所以不会执行checkThread方法,自然不会报错。当进行耗时操作时,此时viewRootlmp已经创建成功,所以程序会崩溃。

(3)Android 采用单线程模式:如果采用多线程去更新UI会导致程序的不可控性,多线程会造成资源竞争。就算采用锁来控制,那还是相当于采用单线程模式。

二、子线程更新UI的六种方式

(1)

 new Thread(new Runnable() {
@Override
public void run() {
Message message=handler.obtainMessage();
message.what=1;
handler.sendMessage(message);
}
}).start(); Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
textView.setText("子线程更新ui");
}
}
};

(2)

new Thread(new Runnable() {
@Override
public void run() {
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("子线程更新ui");
}
}); }
}).start();

(3)

new Thread(new Runnable() {
@Override
public void run() {
new Handler().post(new Runnable() {
@Override
public void run() {
textView.setText("子线程更新ui");
}
});
}
}).start();

(4)

new Thread(new Runnable() {
@Override
public void run() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("子线程更新ui");
}
},3000);//延迟时长
}
}).start();

(5)

new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText("慕九");
}
});
}
}).start();

(6)

new updateAsyncTask().execute();

class  updateAsyncTask extends AsyncTask<String,Integer,String> {

        @Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected String doInBackground(String... strings) {
publishProgress();
return null;
} @Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
} @Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
textView.setText("子线程更新ui");
}
}

Android 子线程更新UI的六种方式的更多相关文章

  1. Android子线程更新UI成功

    android子线程更新UI成功 今天在写demo的时候,在子线程中更新UI,发现更新成功,记录一下. protected void onCreate(Bundle savedInstanceStat ...

  2. Android子线程更新UI的方法总结

    版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...

  3. android子线程更新UI

    参考:https://www.cnblogs.com/joy99/p/6121280.html 子线程是不能直接更新UI的.Android实现View更新有两组方法,分别是invalidate和pos ...

  4. Android子线程更新UI主线程方法之Handler

    背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. ...

  5. Android 子线程更新UI 异常

    众所周知,Android是不可以在子线程中直接更新UI的,需要借助Handler或者View.post(Runnable runnable)或者runOnUIThread(Runnable runna ...

  6. android 子线程更新UI

    参考http://examples.javacodegeeks.com/android/core/os/handler/android-handler-example/package com.exam ...

  7. Android通过子线程更新UI的几种方式

    一般情况下,UI的更新都少不了Handler,首先我们先了解一下Handler机制: Handler消息机制 定义 Message 线程间通信的数据单元,可通过message携带需要的数据创建对象:M ...

  8. Android开发——实现子线程更新UI

    Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行 ...

  9. [Android学习笔记]子线程更新UI线程方法之Handler

    关于此笔记 不讨论: 1.不讨论Handler实现细节 2.不讨论android线程派发细节 讨论: 子线程如何简单的使用Handler更新UI 问题: android开发时,如何在子线程更新UI? ...

  10. Android可以子线程更新UI?

    初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情! 但是,这个是针对普通的view做的限制,而TextureView,Su ...

随机推荐

  1. 题解 - Japanese Student Championship 2021

    前言:这场的题解由于蓝桥杯比赛拖延几天才发 关于本篇题解,目前还是有部分题没有解答出来正在加油补题ing 补题链接:Here A - Competition 题意:给定 \(X,Y,Z\) 代表的意义 ...

  2. AtCoder ABC 181 个人题解(本场GJ x 3)

    补题链接:Here A - Heavy Rotation 对 \(N\) 进行奇偶判断,奇数穿 Black .偶数穿 White B - Trapezoid Sum 前 \(n\) 项和公式:\(S_ ...

  3. Oracle JDK7 bug 发现、分析与解决实战

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/8f34CaTp--Wz5pTHKA0Xeg作者:vivo 官网商城开发团队 众所周知,Ora ...

  4. 应届生必读:Java真实项目的开发流程和常用工具

    本文出自本人写的书,谢绝转载,更勿抄袭. 本人有多年的Java面试官经验,经常要和一些包装项目经验的求职者打交道.当然平时也兼职做些Java面试辅导工作,最近也陆续帮一些在校生朋友成功找到Java工作 ...

  5. 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件

    ​ 某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的Unity3d引擎的手游保护方案,其中对Dll文件的保护介绍如下, "Dll加固混淆针对Unity游戏,对 ...

  6. ICDM'23 BICE论文解读:基于双向LSTM和集成学习的模型框架

    本文分享自华为云社区<ICDM'23 BICE论文解读>,作者:云数据库创新Lab. 导读 本文<Efficient Cardinality and Cost Estimation ...

  7. 接口自动化测试复习巩固第二天,管理员后端验证和接口抓包+requests实现

    接口自动化测试第二天,需要用到的第三方库有os,openpyxl,json,pytest,requests 首选我们今天的目标是写出一个测试登录用例的脚本,这里我用的是分层设计,整个框架暂时被分为工具 ...

  8. 如何实现 Excel 表格转置(行列互换)

    直接上经验贴: https://baijiahao.baidu.com/s?id=1690475581736550777&wfr=spider&for=pc 大概就是 先复制粘贴,在粘 ...

  9. Linux性能分析——TOP命令详解

    Linux性能分析--TOP命令详解 1.Top命令介绍 Linux系统中,Top命令主要用于实时运行系统的监控,包括Linux内核管理的进程或者线程的资源占用情况. 这个命令对所有正在运行的进程和系 ...

  10. 【C】《C专家编程》阅读体会

     [来源]https://mp.weixin.qq.com/s/0kmN5knql4yrOuUcnebwIQ