A. android主線程和子線程怎麼切換的
設置標記變數,while(isValid){} 如果想退出的時候,將isValid置為false
B. 主線程什麼都沒做,就會等待子線程結束。這是為什麼
你這個主線程沒有等子線程先執行,主線程幾個字不先打出來嗎,你可以在主線程裡面用 a1.join(); 這樣主線程就會等子線程先執行。
C. android 主線程和子線程有什麼區別
本文較為深入的分析了android中UI主線程與子線程。分享給大家供大家參考。具體如下:
在一個Android 程序開始運行的時候,會單獨啟動一個Process。默認的情況下,所有這個程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種,除此之外還有Content Provider和Broadcast Receiver)都會跑在這個Process。
一個Android 程序默認情況下也只有一個Process,但一個Process下卻可以有許多個Thread。在這么多Thread當中,有一個Thread,我們稱之為UI Thread。UI Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main Thread,主要是負責控制UI界面的顯示、更新和控制項交互。在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一個線程中運行。因此,我們認為,UI Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網路,下載數據,查詢資料庫等),都應該交由子線程去執行,以免阻塞主線程。
那麼,UI Thread如何和其他Thread一起工作呢?常用方法是:誕生一個主線程的Handler物件,當做Listener去讓子線程能將訊息Push到主線程的Message Quene里,以便觸發主線程的handlerMessage()函數,讓主線程知道子線程的狀態,並在主線程更新UI。
例如,在子線程的狀態發生變化時,我們需要更新UI。如果在子線程中直接更新UI,通常會拋出下面的異常:
11-07 13:33:04.393: ERROR/JavaBinder(1029):android.view.ViewRoot$:Only the original thread that created a view hierarchy can touch its views.
意思是,無法在子線程中更新UI。為此,我們需要通過Handler物件,通知主線程Ui Thread來更新界面。
如下,首先創建一個Handler,來監聽Message的事件:
private final int UPDATE_UI = 1;
private Handler mHandler = new MainHandler();
private class MainHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
或者:
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}
當子線程的狀態發生變化,則在子線程中發出Message,通知更新UI。
mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0);
在我們的程序中,很多Callback方法有時候並不是運行在主線程當中的,所以如果在Callback方法中更新UI失敗,也可以採用上面的方法。
D. Android可以讓主線程在其他子線程執行完後再執行嗎如果可以,該怎麼做
android中什麼時候會選擇用廣播來進行線程間的通信 Android 多線程 通信 線程中通信就不要用廣播了吧 進程中通信可以用廣播或者aidl 可是,這兩天看到的項目都是這么做的;然後,自己分析了下,覺得一下的理由也是可以成立的; 1.正常情況下我們選擇handler消息機制來進行單向的線程間的通信;(工作線程向主線程發送消息) 因為主線程有現成的handler,而工作線程沒有現成的handler,這樣的話,主線程將handler交給工作線程而讓工作線程將工作的結果交給主線程; 相反,工作線程中沒有現成的handler(事實上是沒有消息隊列,也就是handler沒有綁定到工作線程),那麼,如果開辟的話,代碼角度上是挺麻煩的(相對應廣播機制來說); 2.廣播機制本身就是雙向的(工作線程向主線程發送廣播,主線程向工作線程發送廣播); //另外,對於像一個activity中通過fragment來進行界面的處理; 我們大多數情況下是採用廣播的機制來實現fragment中adapter的數據的更新;這樣做主要是考慮到工作線程的任務載入完成,而具體的對應刷新的activity可能還沒有啟動; 另外,基於介面隔離原則,如果用handler進行通信的話,則不能很好的滿足這一原則; 你要是周期比較長 用廣播好些吧 應該與周期關系不是很密切。最主要的原因是兩條線成是雙向通信。 Handler類似於P2P的通信。 廣播則類似於一個server端,用來處理分發不同線程的請求,從控制器的角度來說用廣播更好一點。 一般使用Handler的,多用於子線程處理事務,完成時告知主線程這一類的情況。 而類似樓主所說的多條線程之間需要頻繁交互的話,廣播是個很好的選擇,並且結構清晰,只是不知道廣播的性能與handler相比會怎麼樣。
E. android中主線程執行時,子線程執行嗎
執行,但一般不與視圖交互,因為在android 中還有一個headler概念,我對這塊也不是特別清楚
F. 關於主線程等待子線程結束的問題。
如果非要這么做的話,我能想到的是增加狀態變數,在子線程處理完後更改狀態變數的值,在主線程中使用循環檢查狀態變數的值,檢測到子處理完後跳出循環,繼續主線程。
G. android怎麼讓主線程等待子線程的執行
http://blog.csdn.net/null1989/article/details/11972881
H. 如何使「主線程」等待「子線程」執行結束後再繼續執行
在主線程里調用子線程,這樣「子線程」執行結束後,才會繼續執行主線程的後續程序。