我有两个JNI本机方法在我的UI中回调Java方法。
1)显示进度.. 2)取消进度
上述两个电话肯定是按顺序进行的。它们都调用Java方法来创建新的runnables,如下所示:
m_Activity.runOnUiThread( new Runnable()
{
@Override
public void run()
{
DisplayProgressUpdate( m_ProgressPercent );
}
} );
-
m_Activity.runOnUiThread( new Runnable()
{
@Override
public void run()
{
m_Progress.dismiss();
}
} );
我所看到的是,在进度更新runnable完成之前发生了dismiss runnable。我原以为是因为它们是按顺序调用的,因为它们都是在同一个(UI)线程上被请求的,它们也会按顺序发生。情况不是这样吗?
这就是我应该使用Handler之类的东西来同步/排序这些调用的原因吗?
编辑:好的,我实现了一个处理程序并仍然观察到相同的行为。实际上我的调试让我很困惑。看起来Dismiss Java代码在进度更新完成之前就已经发生了,但实际上它是Java调试打印,只要JNI调用Java方法发布到处理程序 - 而不是实际的可运行线程本身。所以.. tajonn07在某种程度上是正确的 - 在我有机会看到它之前对话框正在关闭,我的调试让我误入歧途。谢谢你的帮助。答案 0 :(得分:1)
我怀疑你所看到的不是首先被执行的解雇,而是在显示之后它被执行得如此之快,甚至没有显示。
我建议使用处理程序。但即使使用处理程序,如果它在您的UI线程中,它将冻结您的屏幕。
它有点乱,但您可以使用处理程序将这两个代码块放在另一个线程中。这不是最干净的解决方案,但应该做到这一点!
答案 1 :(得分:0)