我将代号为一个应用程序委托给本机电子邮件应用程序。我期待这个调用将一个应用程序的代号发送到后台,或者至少停止进一步的代码执行,控件正在恢复,但是这不会发生。没有生命周期方法(停止/启动)被调用,代理之后的代码仍在执行。
我希望在用户完成电子邮件应用程序之前停止代号为一个应用程序的所有执行,然后在代号为一个应用程序重新获得控制权时以某种方式通知。
我确信应该有一种简单,直接的方法来做到这一点,但我无法找到它。
请帮忙!
如果可能的话,我宁愿不强迫应用程序最小化。
答案 0 :(得分:1)
stop()
和start()
,但它们将在EDT上异步调用,因此假设您的代码看起来像这样的伪代码:
callNativeEmailApp();
doSomeStuff();
然后doSomeStuff()
会立即发生,stop()
尚未被调用,因为它仍在等待EDT主题。您可以使用以下命令为stop()
提供调用的机会:
callNativeEmailApp();
Display.getInstance().callSerially(() -> doSomeStuff());
但这可能会有问题,因为它依赖于较小的平台行为,启动电子邮件应用可能需要一段时间,只有当电子邮件应用程序获得控制权时才会调用stop()
。
更好的方法是做这样的事情:
setFlagThatWeShouldBeInEmailApp();
callNativeEmailApp();
然后在stop()
和start()
中,您可以测试这些标志并在那里写入逻辑。请注意,这是脆弱的"因为你需要处理崩溃或取消的情况。