You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

handler.postDelayed无法正常工作,应用崩溃请求技术帮助

解决Handler.postDelayed导致应用崩溃的问题

嘿,我一眼就看出问题所在了——你代码里的handler变量没有初始化就直接调用postDelayed方法了,这会触发NullPointerException(空指针异常),直接导致应用崩溃停止运行。

问题根源

在你的代码片段里,只看到了对txt的查找初始化,但完全没有对handler进行实例化操作。当一个null对象调用方法时,Java虚拟机就会抛出空指针异常,这就是应用崩溃的直接原因。

修复方案

你只需要在调用postDelayed之前,先初始化Handler实例就行。由于你要在Runnable里更新UI(设置TextView的文本),必须确保Handler关联的是主线程的Looper(Android里只有主线程能更新UI)。

修复后的完整代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txt = (TextView) findViewById(R.id.texte);
    
    // 初始化Handler,明确关联主线程Looper
    Handler handler = new Handler(Looper.getMainLooper());
    
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            txt.setText(String.valueOf(1020));
        }
    }, 5000);
}

额外注意事项

  • 如果handler是你的Activity成员变量,可以直接在类里初始化,这样整个Activity生命周期内都能复用:
    private Handler handler = new Handler(Looper.getMainLooper());
    
  • 从Android 10(API 29)开始,直接使用new Handler()会收到警告,因为它默认使用当前线程的Looper。明确指定Looper.getMainLooper()可以避免潜在的线程问题,让代码更健壮。
  • 顺便检查一下R.id.texte是否和你布局文件里TextView的id完全一致,如果id不匹配,txt也会是null,同样会导致崩溃。

内容的提问来源于stack exchange,提问作者benlyazid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:59:07