final Handler handler = new Handler();
LOG.d("delay");
handler.postDelayed(new Runnable() {
@Override public void run() {
LOG.d("notify!");
//calling some methods here
}
}, 2000);
“延迟”确实显示在日志中,但根本不显示其他内容。以及调用的方法run()
也根本不被调用。谁能帮忙解释为什么会发生这种情况,我做错了什么吗?
具有此代码的类扩展了 IntentService,这会出现问题吗?
===========================
更新:
我把这段代码放在扩展的类中IntentService
。我发现它唯一有效的地方是在构造函数中。但我需要把它放在onHandleIntent
方法。所以我检查了文档onHandleIntent
它说:
该方法在工作线程上调用,并发出要处理的请求。一次仅处理一个 Intent,但处理发生在独立于其他应用程序逻辑运行的工作线程上。因此,如果此代码需要很长时间,它将阻止对同一 IntentService 的其他请求,但不会阻止其他任何请求。当所有请求都处理完毕后,IntentService 会自行停止,因此您不应调用 stopSelf。
所以根据我得到的结果,我觉得我不能使用postDelayed
在“工作线程”中。但任何人都可以解释一下这一点,比如为什么这在工作线程中不起作用?提前致谢。
Convert
final Handler handler = new Handler();
to
final Handler handler = new Handler(Looper.getMainLooper());
这对我有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)