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
相关产品推荐
相关产品推荐

