猿问

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

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

从在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");
    }}


皈依舞
浏览 1063回答 3
3回答

倚天杖

所有这些都不完全相同,尽管它们都会产生相同的净效果。第一个和第二个的区别是如果你碰巧在……上面执行代码时的主应用程序线程,第一个(runOnUiThread())将执行Runnable马上。第二个(post())总是将Runnable在事件队列的末尾,即使您已经在主应用程序线程上。第三个实例,假设您创建并执行BackgroundTask,将浪费大量时间从线程池中抓取线程,以执行默认的no-op。doInBackground(),在最终完成相当于post()..到目前为止,这是这三个国家中效率最低的。使用AsyncTask如果您在后台线程中确实有工作要做,而不仅仅是为了使用onPostExecute().

杨魅力

它可以在没有任何参数的情况下在任何地方使用:new Handler(Looper.getMainLooper()).post(new Runnable() {     @Override     public void run() {         Log.d("UI thread", "I am the UI thread");     }});

胡说叔叔

还有第四种方法Handlernew&nbsp;Handler().post(new&nbsp;Runnable()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Code&nbsp;here&nbsp;will&nbsp;run&nbsp;in&nbsp;UI&nbsp;thread &nbsp;&nbsp;&nbsp;&nbsp;}});
随时随地看视频慕课网APP

相关分类

Android
我要回答