1,通过Handler机制

主线程中定义Handler,子线程发消息,通知Handler完成UI更新,Handler对象必须定义在主线程中,如果是多个类直接互相调用,就不是很方便,需要传递content对象或通过接口调用。 另外Handler机制与Activity生命周期不一致的原因,容易导致内存泄漏,不推荐使用。

private void one() {

handler=new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what){

case 123:

tv.setText(""+msg.obj);

break;

}

}

};

new Thread(){

@Override

public void run() {

super.run();

for (int i=0;i<3;i++){

try {

sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

Message message=new Message();

message.what=123;

message.obj="通过Handler机制";

handler.sendMessage(message);

}

}.run();

}

2,runOnUiThread方法

private void two(){

new Thread(){

@Override

public void run() {

super.run();

for (int i=0;i<3;i++){

try {

sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

runOnUiThread(new Runnable() {

@Override

public void run() {

tv.setText("通过runOnUiThread方法");

}

});

}

}.run();

}

用Activity对象的runOnUiThread方法更新,在子线程中通过runOnUiThread()方法更新UI,强烈推荐使用。

3,View.post(Runnable r) 、

private void three(){

new Thread(){

@Override

public void run() {

super.run();

for (int i=0;i<3;i++){

try {

sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

tv.post(new Runnable() {

@Override

public void run() {

tv.setText("通过View.post(Runnable r) 方法");

}

});

}

}.run();

}

这种方法更简单,但需要传递要更新的View过去,推荐使用

4,AsyncTask

private void four(){

new MyAsyncTask().execute("通过AsyncTask方法");

}

private class MyAsyncTask extends AsyncTask{

@Override

protected Object doInBackground(Object[] objects) {

for (int i=0;i<3;i++){

try {

sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

return objects[0].toString();

}

@Override

protected void onPostExecute(Object o) {

super.onPostExecute(o);

tv.setText(o.toString());

}

}

到此这篇关于android实现线程间通信的四种常见方式的文章就介绍到这了,更多相关android 线程间通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

android 多线程间通信,android实现线程间通信的四种常见方式相关推荐

  1. Android开发的之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  2. Java多线程编程-(4)-线程间通信机制的介绍与使用

    上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  3. 多线程进阶(五)--线程间的通信

    多线程基础概念:多线程入门(一) 多线程基础实现:多线程入门(二) 多线程管理:多线程基础(三) 线程间的状态转换:多线程基础(四) 本篇我们就简单的介绍下,线程间的通信: 多线程进阶(五)--线程间 ...

  4. android 多线程下载,断点续传,线程池

    android 多线程下载,断点续传,线程池 你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效 ...

  5. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  6. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  7. 【Android】android开发之splash闪屏页的四种实现方式,启动页的实现教程。

    2019独角兽企业重金招聘Python工程师标准>>> 作者:程序员小冰,GitHub主页: https://github.com/QQ986945193 新浪微博:http://w ...

  8. [转][Android]Android数据的四种存储方式

    android.database.sqlite 类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBui ...

  9. Android开发之入门基础篇--拨号器的四种实现方式

    整理之前的学习笔记,发现了很多在学习Android基础的过程中的一些很适合一些新手开发的代码,想想之前也是一步一个脚印,一行一行的代码敲出来的,虽然这些代码很简单,但是里面的编程思路却是很有学习意义的 ...

最新文章

  1. c++ 函数的指针调用
  2. UNIX高级环境编程(9)进程控制(Process Control)- fork,vfork,僵尸进程,wait和waitpid...
  3. java索引序列_视图、序列、索引
  4. vtk环境搭建(windowsXP/win7,vtk6.0.0+cmake2.8+vs2010)
  5. 7位领域大佬,带你解读三维点云的前沿应用
  6. Java常用接口与类——Math类、Random类、BigDecimal类
  7. Codeforces Gym 100463A Crossings 逆序数
  8. Cisco——DHCPv6小实验
  9. UVA10852 Less Prime【筛选法】
  10. iis php日志查看工具,教你如何查看IIS日志
  11. OpenCR介绍以及自制OpenCR
  12. vue安装vue-pdf(预览pdf)
  13. IT十八掌徐培成第一天笔记
  14. totolinkn200up怎么设置_TOTOLINK N600R V2路由器设置教程(图文)
  15. scada系统集成_SCADA和DCS的区别以及PLC系统和它们的关系
  16. 1:在/tmp目录下,新建目录director新建三个txt文件,分别命名为file1、file2、file3. 用vi编辑器分别在三个文件中输入内容。
  17. 结合实际案例谈谈项目管理经验
  18. 教你将PDF文件旋转的方法
  19. 华米 Amazfit 跃我 GTR 4和GTS 4的区别
  20. 闪耀暖暖的3D建模真好吗?

热门文章

  1. 京东方校园招聘页面重构
  2. change在python是什么函数_python函数基础
  3. 课堂随机点名神器6个系列原创软件[1]转盘版随机点名
  4. ABC243 ABCDE
  5. 写魔兽改键时遇到的问题
  6. 【Java】棋盘覆盖问题
  7. 不想手动再配置logging?那可以试试loguru
  8. Android——bug:not attached to a context.
  9. 转载:web 自动化测试
  10. 如何给你的网站接入第三方支付功能