亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android基礎:在UI線程中運行代碼

Android基礎:在UI線程中運行代碼

皈依舞 2019-07-15 09:35:16
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");     }}
查看完整描述

3 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

所有這些都不完全相同,盡管它們都會產生相同的凈效果。

第一個和第二個的區別是如果你碰巧在……上面執行代碼時的主應用程序線程,第一個(runOnUiThread())將執行Runnable馬上。第二個(post())總是將Runnable在事件隊列的末尾,即使您已經在主應用程序線程上。

第三個實例,假設您創建并執行BackgroundTask,將浪費大量時間從線程池中抓取線程,以執行默認的no-op。doInBackground(),在最終完成相當于post()..到目前為止,這是這三個國家中效率最低的。使用AsyncTask如果您在后臺線程中確實有工作要做,而不僅僅是為了使用onPostExecute().


查看完整回答
反對 回復 2019-07-15
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

它可以在沒有任何參數的情況下在任何地方使用:

new?Handler(Looper.getMainLooper()).post(new?Runnable()?{
????@Override
????public?void?run()?{
????????Log.d("UI?thread",?"I?am?the?UI?thread");
????}});


查看完整回答
反對 回復 2019-07-15
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

還有第四種方法Handler

new Handler().post(new Runnable() {
    @Override
    public void run() {
        // Code here will run in UI thread
    }});


查看完整回答
反對 回復 2019-07-15
  • 3 回答
  • 0 關注
  • 1085 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號