当前位置: 首页 > 知识库问答 >
问题:

Android基础:在UI线程中运行代码

纪勇军
2023-03-14

在UI线程中运行代码的观点中,以下两者之间有什么区别吗:

MainActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

MainActivity.this.myView.post(new Runnable() {
    public void run() {
        Log.d("UI thread", "I am the UI thread");
    }
});

而且

private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {
    protected void onPostExecute(Bitmap result) {
        Log.d("UI thread", "I am the UI thread");
    }
}

共有1个答案

昝光临
2023-03-14

这些都不是完全相同的,尽管它们都将产生相同的净效果。

第一个和第二个的区别在于,如果您在执行代码时恰好在主应用程序线程上,那么第一个(runonuithread())会立即执行runnable。第二个(post())总是将runnable放在事件队列的末尾,即使您已经在主应用程序线程上。

第三种方法,假设您创建并执行BackgroundTask的实例,将浪费大量时间从线程池中提取线程,以执行默认的no-opdoinbackground(),然后最终执行相当于post()的操作。这是迄今为止三种方法中效率最低的一种。如果您在后台线程中确实有工作要做,请使用AsyncTask,而不仅仅是为了使用OnPostExecute()

 类似资料:
  • 问题内容: 据我所知,在android中,当我们运行进程时,它们始于Main线程。当我们做一些繁重的工作时,我们使用了一个新线程。如果我们想修改UI外观,可以使用在UI上运行。 有人可以向我解释这些线程的作用以及如何使用它们吗? 问题答案: UI线程和主线程只是同一线程的不同名称。 应用程序的所有UI膨胀都在此主线程上完成。之所以将“较重”的工作委派给其他线程,是因为我们不希望这些操作减慢UI的响

  • 虽然这个问题似乎已经被问了很多次,而且我已经得到了很高的答案,但我想指出,多个答案是相互冲突的,而且我永远无法完全理解异步代码的内部结构。我完全理解它的意思是继续顺序代码执行并在以后完成任务,我正在努力理解后面的部分。 答案1-建议UI/Main 首先,这个问题包含了下面的测试,建议异步代码运行在main/UI线程上,并链接了一篇文章,解释为什么异步代码没有其他线程。 问:“在我看来,由于我主要做

  • 我有一个ScheduleTimer类,它可以处理日期数组。这是: 如果我像Java应用程序一样运行它,而不是像android一样运行,并且它在控制台中每隔一秒打印一次,那么它就可以正常工作。但是当在android环境中运行它时,它要么说UI线程不能从任何其他线程接触,要么它在类ScheduleTimer的方法中给了我null点异常。 我这样使用它:

  • jQuery UI 基础教程

  • 问题内容: 有没有办法在非UI线程中进行UI更改?简短的问题。 问题答案: 如果您不想使用AsyncTask,请在您的主要活动中尝试使用带有内部类(ResponseHandler)的观察者模式,对不起,我无法正确设置格式,但是我确定您知道

  • 概述 工具 调色工具 Adobe Kuler colourco 参考