android不同线程之间数据交互

本文探讨了Android开发中跨线程数据交互的关键方法,包括使用公共静态类存储数据、利用Handler机制在不同线程间传递消息等。重点介绍了Handler的工作原理及如何确保线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨线程(不是跨进程,一个程序间主要是跨线程,不同程序间跨进程,当然也跨线程)的数据交互,我感觉这个问题是android开发中关键的核心。常见方法有一下几种:

1、利用一个公共的静态类来存储方法。这个公共的静态变量可以在任何线程中被使用,我看到很多acitivity之间就是用这种方式来传递的(这种方式在不同线程间是线程不安全的。这个需要自己去把握了)。这种方式更多传递的是一直不变的量或者一个app应用的公共常量。

2、利用handler去传递,handler的特点是每个线程都有一个独特的loop和消息循环。但是如果要实现子线程(工作线程)发送数据给主线程,就可以在子线程创建handler(指定主线程的,创建handler例如

Handler handler=new Handler(getMainLooper());
)这个方式确实也创建了一个handler对象,但是这个handler对象是绑定了主线程的looper和消息循环,所以可以利用这个handler给主线程发送消息。你可能会问这个会不会造成线程不安全。答案是android系统的消息机制已经给你加了锁,保证了线程同步。当然你也可以在子线程里面之间拿到主线程的handler。这就是所谓的不同线程之间传递handler对象了。这个方式就有很多了。可以重写一个application的类来传递。但是最好不要用static静态变量来弄,因为也可能线程不安全。

有一条知识点需要明确下。一个线程可以有多个handler,但是只能有一个 loop和消息循环。


主线程和子线程数据交互都可以用handler交互。只不过是把各自handler的实例给对方即可。

handler的实质其实就是与thread去绑定,然后利用线程去进行不同的数据交互。以后用的越来越多就越能理解handler的本质。hander建立乃是要绑定线程的,这是它最重要的构造参数。除开ui线程外,其余子线程是必须首先looper初始化,然后让looper.loop进行消息循环。这样任意的类之间,任意的线程之间就能够利用handler这个中介进行很好的数据交互了。

其实如果把所有的文件都写在一个类里面,本质上就是利用的静态的方法来进行传递数据了。如果把不同的文件和不同的类需要进行数据传递的话,静态方法是一个途径,但是如果涉及到回调这类的,并且线程安全的话,handler是一个不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值