線程相關記錄

誤區(qū)一:(線程阻塞)

private void button1_click() throws InterruptedException {
    AlertDialog dialog = new AlertDialog.Builder(this)
            .setMessage("加載中...")
            .show();
    Thread.sleep(5000);
    button1.setText("加載完畢");
    dialog.dismiss();
}

????????以上代碼铸屉,很多人描述看到的效果是:點擊按鈕后,彈出一個對話框切端,顯示“加載中...”,5秒后按鈕顯示文字變成了“加載完畢”彻坛,對話框消失。
????????但是以上描述是錯誤的踏枣,你根本看不到對話框昌屉,你會發(fā)現(xiàn)事實上是這樣的:點擊按鈕后,按鈕沒有抬起來茵瀑,5秒后间驮,按鈕抬起來了,同時按鈕文字變成了“加載完畢”瘾婿。
????????我們發(fā)現(xiàn)原來整個過程中蜻牢,AlertDialog毫無存在感烤咧,根本也看不到它出現(xiàn)偏陪,原因是因為抢呆,這里發(fā)生了UI線程阻塞。當要show出dialog的時候笛谦,下一句是Thread.sleep(5000)抱虐,這句話的意思是,當前的線程睡眠5秒饥脑,也就是UI線程恳邀,因為這句代碼沒有寫在子線程中,如果它寫在了子線程中灶轰,那么睡眠的就是子線程了谣沸,而非主線程。當睡眠完后笋颤,馬上修改按鈕的文字乳附,再讓dialog消失,dialog的整個顯示到消失伴澄,排除掉睡眠時間赋除,肉眼根本無法捕捉到。
????????如果我們真的要達到很多人描述的那種效果非凌,我們需要這樣修改(且不說代碼嵌套層次和優(yōu)化):

private void button1_click() throws InterruptedException {
    AlertDialog dialog = new AlertDialog.Builder(this)
            .setMessage("加載中...")
            .show();

    new Thread(new Runnable() {
        @Override
        public void run() {
            Thread.sleep(5000);

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    button1.setText("加載完畢");
                    dialog.dismiss();
                }
            });
        }
    }).start();
}




誤區(qū)二:(cpu對線程的調(diào)度)

private void button1_click(View view) {
    final AlertDialog dialog = new AlertDialog.Builder(this)
            .setMessage("加載中...")
            .show();
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        button1.setText("加載完畢1");
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

    button1.postDelayed(new Runnable() {
        @Override
        public void run() {
            button1.setText("加載完畢2");
            dialog.dismiss();
        }
    },3000);
}

????????以上代碼举农,很多人描述看到的效果是:點擊按鈕后,彈出一個對話框敞嗡,顯示“加載中…”颁糟,5秒后,按鈕文字變成了“加載完畢1”喉悴,又停了3秒后棱貌,按鈕問題變成了“加載完畢2”,對話框消失粥惧。
????????同樣键畴,以上描述也是錯誤的。我們可以理解線程的開啟突雪,就是一個任務塊的開啟起惕,打開一個任務的開啟,并不需要花費cpu什么時間咏删,同樣的惹想,postDelayed也只是通知cpu,3秒后開啟一個任務督函,也是不需要花多少時間的嘀粱,至于具體去處理這些任務的時候激挪,那又是另一個層面的事情,不會影響當前的代碼執(zhí)行順序锋叨,也就是說垄分,整個代碼塊,我們可以理解為在UI線程中娃磺,只給cpu下達了三個命令:彈出一個對話框薄湿,開一個子線程執(zhí)行一個任務,3秒后執(zhí)行一個任務偷卧。
????????所以豺瘤,我們看到的效果應該是:點擊按鈕后,彈出一個對話框听诸,顯示“加載中…”坐求,3秒后,按鈕問題變成了“加載完畢2”晌梨,對話框消失桥嗤,又過了2秒后,按鈕文字變成了“加載完畢1”派任。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砸逊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掌逛,更是在濱河造成了極大的恐慌师逸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豆混,死亡現(xiàn)場離奇詭異篓像,居然都是意外死亡,警方通過查閱死者的電腦和手機皿伺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門员辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸵鸥,你說我怎么就攤上這事奠滑。” “怎么了妒穴?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵宋税,是天一觀的道長。 經(jīng)常有香客問我讼油,道長杰赛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任矮台,我火速辦了婚禮乏屯,結果婚禮上根时,老公的妹妹穿的比我還像新娘。我一直安慰自己辰晕,他們只是感情好蛤迎,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伞芹,像睡著了一般忘苛。 火紅的嫁衣襯著肌膚如雪蝉娜。 梳的紋絲不亂的頭發(fā)上唱较,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音召川,去河邊找鬼南缓。 笑死,一個胖子當著我的面吹牛荧呐,可吹牛的內(nèi)容都是我干的汉形。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倍阐,長吁一口氣:“原來是場噩夢啊……” “哼概疆!你這毒婦竟也來了?” 一聲冷哼從身側響起峰搪,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岔冀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后概耻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體使套,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年鞠柄,在試婚紗的時候發(fā)現(xiàn)自己被綠了侦高。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡厌杜,死狀恐怖奉呛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夯尽,我是刑警寧澤瞧壮,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站呐萌,受9級特大地震影響馁痴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肺孤,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一罗晕、第九天 我趴在偏房一處隱蔽的房頂上張望济欢。 院中可真熱鬧,春花似錦小渊、人聲如沸法褥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽半等。三九已至,卻和暖如春呐萨,著一層夾襖步出監(jiān)牢的瞬間杀饵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工谬擦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留切距,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓惨远,卻偏偏與公主長得像谜悟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子北秽,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容