- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这段代码:
public void updateOptionLists() {
Log.d("UI", "Called update");
if (updating){
return;
}
updating = true;
runOnUiThread(
new Runnable() {
@Override
public void run() {
updating = false;
updateOptionList();
scrollToLastTapped();
Log.d("UI","Updating");
}
});
Log.d("UI", "Posted update");
}
我对 logcat 的期望是这样的:
据我所知,runOnUi 应该是异步的,对吧?考虑到调用的函数会改变 View ,这需要一段时间,这应该异步运行。对吧?
所以我查看我的 logcat:
为什么会这样?我如何确保它异步运行?
最佳答案
runOnUiThread
将在主线程上执行您的代码,(在此示例中)似乎也是调用它的地方。这解释了您看到的日志语句的顺序 - 所有代码都在单个线程上执行,因此是同步的 per the documentation (我的重点):
Runs the specified action on the UI thread. If the current thread is the UI thread, then the action is executed immediately. If the current thread is not the UI thread, the action is posted to the event queue of the UI thread.
runOnUiThread
通常用于在主线程上执行代码,来自 不同的线程(即后台线程)。使用这个单独的后台线程将使任务异步。如果您想使用后台线程计算的结果修改 UI,则需要在该任务结束时回调 UI 线程。
Android 提供了几种机制,用于在后台线程上执行工作,然后回发到主线程(并非所有机制都明确地使用 runOnUiThread
进行后一操作)。值得阅读的好东西包括 Thread
、Handler
、AsyncTask
、Service
等。
关于Android runOnUiThread 不是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33039600/
我在数据库处理程序中构建了一个函数来使用 jsoup 从 sqlite + html 页面中获取数据。 如何设置 runOnUiThread 来处理数据库 habdler 函数中的线程数据? 或者我如
我收到了用户的错误报告,但我不知道我的代码出了什么问题。 logcat 是这样的: java.lang.NullPointerException at com.laurenswuyts.find.it
我想在我构建的应用程序小部件中发出 HTTP 请求。 这个想法是每隔几个小时,小部件就会通过发出 HTTP 请求来更新自己,并使用它的信息来更新它的 View 。 我已经尝试在 onUpdate 函数
事情是这样的:我正在使用 runOnUiThread() 方法从另一个类接收到来自另一部手机的消息时更改该类的 ImageView 。我通过使用 mainclass.runOnUiThread(new
我有 MainActivity(它扩展了 Activity)和 GameView(它扩展了 SurfaceView)。 MainActivity 有用于得分和剩余时间的 TextView。GameVi
我有一个 AsyncTask 正在运行,在这个线程中我启动了一个 runOnUiThread 来操作我的 View 。如果我关闭我的 AsyncTask,runOnUiThread 在我关闭我的 As
要从其他线程在主线程中运行某些内容,我们调用 runOnUiThread()。问题是,这个调用是同步的还是异步的? 如果我想在主线程中同步运行一些东西,我该怎么做? 最佳答案 您不能“在主线程中异步运
我的 android 应用程序存在内存泄漏。这是一个简单的音乐播放器。在屏幕底部,我有一个 TextView,用于显示耗时。它在下面的线程中更新。 每次我改变方向时,堆大小都会增加。通过查看 DDMS
如果考虑到效率,做following可以吗? new Runnable() { @Override public void run() { tr
我正在创建一个带有 ListView 的下载管理器,它将通过进度条显示当前下载的内容。我可以知道如何更新进度条吗? 例如。我有3节课。 "main.class"= 是一个 ListView 。 "mA
我有这个问题。我正在尝试从另一个线程更新我的 TextView 但它不允许我这样做。 我尝试了很多不同的解决方案,但似乎都没有帮助。在我的 while 循环代码中,一直打印“Started new l
我的应用程序应该连接到服务器并从中接收数据。但由于此错误而无法正常工作: android cannot resolve method runOnUiThread(anonymous java.lang
我正在开发一个使用第三方 tts 的应用程序,名为 flite。我正在做类似 tts 说一句话的事情。我想突出显示每个单词。为此,我设法从 tts 获得了单词级别的回调。工作流程是这样的——按下“说出
我一直在研究 runOnUiThread 方法。如果我只是在我的 Activity 中创建一个方法: public void Test() { runOnUiThread(new Runnab
我找到了 this这里有一个关于如何使用 runOnUiThread 方法的示例,但我不明白如何使用它。 我在主要 Activity 中设置了列表适配器 // Set a gobal refe
我有一个 fragment 叫做 MyRequestFragment ,其中包含一个 RecyclerView并将数据绑定(bind)到 RecyclerView使用 onBindViewHolder
我试图从我的后台线程在 UI 线程上抛出和警告对话框,但我遇到了 runOnUiThread 未定义的问题。我已经尝试过 FindLocation.this.runOnUiThread 和 runOn
我有这段代码: public void updateOptionLists() { Log.d("UI", "Called update"); if (updating){
这个问题在这里已经有了答案: Accessing UI thread handler from a service (7 个回答) 关闭8年前。 我想创建一项服务,如果有任何未读的 SMS,则每 20
我试图在我的一项 Activity 的 onCreate() 方法期间显示进度对话框,在线程中完成填充屏幕的工作,然后关闭进度对话框。 这是我的 onCreateMethod() dialog = n
我是一名优秀的程序员,十分优秀!