日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 再谈handler

發布時間:2025/6/17 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 再谈handler 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在做http網絡事件的響應網絡接收處理一般不能放在主線程中使用,目前也只會使用AsyncTask進行處理!之前雖然寫過handler處理的一些文章但是發現全不會了!無奈~

關于handler某位兄弟已經整理的很透徹了!現在引用下原話如下:

Handler監聽者框架:子線程是事件源,主線程是監聽者。
Handler作為子線程的監聽器出現:主線程中生成Handler的子類,并重寫handleMessage(Message msg) 方法,用來對子線程響應。子線程調用Hanlder的sendMessage(message)發送事件。

import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.util.Log; import android.widget.TextView;public class MainActivity extends Activity {private final static String TAG = "ThreadTest";TextView myTv = null;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(runnable).start();}/*** 主線程監聽者*/Handler myHandler = new Handler() {public void handleMessage(android.os.Message msg) {Log.i(TAG, "begin--->handleMessage");if (msg.what == 0x000001) {myTv.setText(String.valueOf(i));}Log.i(TAG, "end--->handleMessage");super.handleMessage(msg);};};/*** 子線程事件源*/Runnable runnable = new Runnable() {@Overridepublic void run() {while (!Thread.currentThread().isInterrupted()) {i++;Message msg = new Message();msg.what = 0x000001;Log.i(TAG, "begin--->sendMessage");myHandler.sendMessage(msg);Log.i(TAG, "end--->sendMessage");Log.i(TAG, "begin--->dosomething");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}Log.i(TAG, "end--->dosomething");}}};}

?

打印下輸出:發現它并不是等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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。