誰創建的view誰纔可以修改view裏面的內容
android系統約定了一個規則:默認只有主線程纔可以修改應用程序的ui,子線程不可以(更新ui),否則拋出異常
>展示圖片、吐司
子線程更新ui的步驟
1. 創建一個消息處理器Handler(一定要在主線程new出來)
private Handler handler = new Handler() {};
2. 在子線程利用handler發送消息給主線程的消息隊列
handler.sendMessage(msg);
3. 在主線程的消息處理器裏面,處理這個消息
public void handleMessage(Message msg) {}
4. 特殊情況 傳遞數據
Message.obj 攜帶數據
public class MainActivity extends Activity {
private TextView tv;
/**
* 1.創建一個消息處理器,運行在主線程裏面.
*/
private Handler handler = new Handler() {
// 3.loop調用的用來處理消息的方法,運行在主線程
public void handleMessage(Message msg) {
int i = (Integer) msg.obj;
tv.setText("當前進度:"+i+"%");
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
}
public void click(View view) {
new Thread() {
public void run() {
// tv.setText("hahahah"); 子線程不可以直接更新ui
// 2.子線程 通過消息處理器 把一個消息發送到消息隊列(message queue),消息隊列中有looper輪詢,處理消息
for (int i = 0; i < 100; i++) {
Message msg = new Message();
//消息攜帶的數據
msg.obj = i;
handler.sendMessage(msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();
}
}