首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自处理器postDelayed的条件信号?

问来自处理器postDelayed的条件信号?
EN

Stack Overflow用户
提问于 2016-02-23 22:25:45
回答 1查看 1K关注 0票数 1

我对Android程序非常陌生,请原谅我的无知.

我试着做一个简单的Android应用程序:

  • 用户按下按钮,启动postDelayed作业,然后等待条件变量。
  • 超时后,postDelayer作业应该发出信号 私有最终静态超时= 10000;私有处理程序mHandler;最终锁=新的ReentrantLock();最终条件条件= lock.newCondition();@重写受保护的lock.newCondition onCreate(Bundle savedInstanceState) {.mHandler = new ();.}私有void timeOutSignal() {mHandler.postDelayed(新的Runnable() { @Override ()){ Log.d(">> ",“-->超时通知”);lock.lock();尝试{ condition.signal();//释放锁并等待,直到doSomethingElse被调用}最后{ lock.unlock();} },超时);}公共空buttonClick(视图视图){ timeOutSignal();Log.i(“??”,“.);lock.lock();尝试{ condition.await();}InterruptedException (InterruptedException e) { // todo }最后{ lock.unlock();}Log.i(“??”,“.等等!");}

结果是buttonClick()一直在等待,我甚至没有看到“-->超时通知”消息.

我做错什么了?

编辑:试图修复混乱的例子..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-23 22:34:51

你不能做你想做的事。在活套线程上运行处理程序。使用默认构造函数创建的处理程序将使用当前运行的Looper线程。在本例中,它是主活套线程(或UI线程)。因此,您正在锁定UI线程,而Handler则在UI线程上解锁,但它永远不会达到这个程度,因为您正在阻塞UI线程。

而且,在任何时候,我都没有看到您实际上调用了将posts发布到Handler的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35589489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档