Android 再谈handler
今天在做http網絡事件的響應網絡接收處理一般不能放在主線程中使用,目前也只會使用AsyncTask進行處理!之前雖然寫過handler處理的一些文章但是發現全不會了!無奈~
關于handler某位兄弟已經整理的很透徹了!現在引用下原話如下:
Handler監聽者框架:子線程是事件源,主線程是監聽者。
Handler作為子線程的監聽器出現:主線程中生成Handler的子類,并重寫handleMessage(Message msg) 方法,用來對子線程響應。子線程調用Hanlder的sendMessage(message)發送事件。
?
打印下輸出:發現它并不是等dosomething執行完畢之后再調用handlemessage事件,而是一旦調用sendmessage后就會執行handlemessage。
?
Handler鉤子方式:在主線程中生成一個Hanlder,用Handler的Post(Runnable)方法可以將Runnable鉤到主線程中運行。
import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.TextView;public class MainActivity extends Activity {private final static String TAG = "ThreadTest";TextView myTv = null;//handler在主線程中創建,調用post的時候鉤子會把它鉤回主線程Handler myHandler = new Handler();int i = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myTv = (TextView) this.findViewById(R.id.tv1);new Thread(runnable1).start();}/*** 子線程*/Runnable runnable1 = new Runnable() {@Overridepublic void run() {while (true) {i++;myHandler.post(runnable2);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}};/*** 使用鉤子將該子線程鉤到主線程中*/Runnable runnable2 = new Runnable() {@Overridepublic void run() {myTv.setText(String.valueOf(i));}};}?
對于我們有了這樣子的一個handler,如果需要進行一個非常耗時的網絡請求,也不必擔心遲遲無法顯示activity。因為下載的任務交給了我們的子線程。當完成任務的時候我們可以調用sendMessage方法,通知主線程更新UI。bingo!真是太棒了!
?
轉載于:https://www.cnblogs.com/chenjianxiang/p/3913644.html
總結
以上是生活随笔為你收集整理的Android 再谈handler的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【划分树】 POJ 2104 HDU 2
- 下一篇: 多区域显示(8)-透明花边