因为在Android上使用谷歌地图时必须包含法律声明我将以下代码添加到我的片段中:
{{1}}
由于法律通知需要很长时间才能放入setMessage,因此应用程序会在几秒钟(5+)后显示对话框。这就是为什么我在showLegalNotice之前添加toast以注意用户它的加载。然而,在加载对话框后显示toast。为什么在加载对话框之前没有吐司?我在创建吐司后调用showLegalNotice。 我知道我可以用线程修复它,但我想了解为什么在创建对话框后吐司正在显示。
答案 0 :(得分:3)
最佳解决方案是将legalNotice
方法代码放在AsyncTask
中。在对话框之后会显示Toast
,因为你正忙于UI线程的忙碌工作,这就是为什么toast落后了。
如果您不了解AsyncTask,可以了解它here。 您可以在AsyncTask的preExecute()
方法中显示Toast。可以保证在采取任何其他操作之前显示Toast。
<强>更新强>
是的,你是对的。代码以顺序方式运行,因此应在方法运行之前显示Toast
。但试着以不同的方式思考。
Toast是一个系统UI组件。你在吐司上调用 show(),你的代码几乎立即转移到下一个繁重或长期运行的任务。
在屏幕上绘制或启动祝酒词有总是稍有延迟,这也取决于Android的各种风格。因此,在吐司开始在屏幕上绘制之前, UI线程在执行长时间运行的任务时会忙碌或卡住并丢失帧。
当你的方法的长期任务结束时, UI线程再次获得自由,并且能够恢复绘制吐司。这就是为什么,toast被显示,但总是在该方法完成了它的执行。