handler.post(runnable)的方式的思考
mHandler1.post(new Runnable() {
?? ??? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public void run() {
//如果這個run方法是死循環,那么,handler2post的線程就不會被執行了
?? ??? ??? ???? try {
?? ??? ??? ??? ??? ?Thread.sleep(10000);
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?textView.setText("handler1");
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?});
?? ??? ?
?? ??? ?mHandler2.post(new Runnable() {
?? ??? ??? ?
?? ??? ??? ?@Override
?? ??? ??? ?public void run() {
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?Thread.sleep(1000);
?? ??? ??? ??? ?} catch (InterruptedException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ??? ?textView.setText("handler2");
?? ??? ??? ?}
?? ??? ?});
2015-08-24
程序一般的確是按代碼順序來執行的。
但此處是:開啟線程1,線程1中的handler將runnable發送給MessageQueue后立即返回,等待消息派發后執行run()的回調函數。在這個等待間隙它會去開啟下一個線程2。
所以run()即便是死循環也不會影響下面的代碼執行。