Handler.postDelayed(new Runnable)是否运行在主线程

本文探讨了postDelayed方法是否在主线程中运行的问题,并通过代码示例验证了postDelayed中的runnable确实运行在UI线程中。这对于理解Android应用中的线程交互十分重要。

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

知识点
postDelayed(new Runnable())是否运行在主线程中?
答案 是的。
这个 new Runnable() 依附于创建Handler的线程,
代码如下
在绝对的UI线程中打印线程ID:

System.out.println("UI Thread = " + Thread.currentThread().getId());  

下面在posdelayed中打印运行线程的ID:

new Handler().postDelayed(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Handler Thread = " + Thread.currentThread().getId());  
        ImageUtil.deleteImageFromSDCard(imgPath);  
    }  
}, 3000);  

最后打印如下:

07-09 10:47:24.110 17026-17026/com.spd.sinoss I/System.out: UI Thread = 1  
07-09 10:47:27.111 17026-17026/com.spd.sinoss I/System.out: Handler Thread = 1  

可以看出来,它们两个程序都是运行在主线程中的。
方法的官方解释是:

The runnable will be run on the thread to which this handler is attached.

既是说,这个开启的runnable会在这个handler所依附线程中运行,而这个handler是在UI线程中创建的,所以
自然地依附在主线程中了。

postDelayed(new Runnable()) 而没有重新生成新的 New Thread()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值