久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android開發(fā)資料

 昵稱Q99IG 2016-07-23
        Handler是Android消息模型最重要的一個(gè)概念,,它可以說是Android消息模型的核心,對(duì)于Looper,、MessageQueue,、Message 等概念一般在應(yīng)用中很少使用。在Android系統(tǒng)框架中也頻繁地使用Handler,,而且為了更方便地使用Handler,,還把Handler進(jìn)行了一些列的封裝,下面就通過列舉一些Handler的使用方法,。

1)Acitivity的runOnUiThread方法

        使用Acitivity的runOnUiThread方法執(zhí)行代碼時(shí),,可以保證所有的代碼都在UI線程中執(zhí)行,使用方法如下:

1                activity.runOnUiThread(new Runnable() {
2                        @Override
3                        public void run() {
4                                textView.setText('HelloWorld');
5                                //所有的代碼都會(huì)在UI線程中執(zhí)行
6                        }
7                });

2)View的post和postDelay方法

        View的post方法與Acitivity的runOnUiThread方法類似,,可以保證所有的代碼都在UI線程中執(zhí)行,,View的post方法使用方法如下:
               
1                view.post((new Runnable() {
2                        @Override
3                        public void run() {
4                                textView.setText('HelloWorld');
5                                //所有的代碼都會(huì)在UI線程中執(zhí)行
6                        }
7                });

        View的postDelay方法與post方法能保證所有的代碼都在UI線程中執(zhí)行,并且還可以讓代碼延遲一定的時(shí)間后執(zhí)行,,View的postDelay方法使用方法如下:

1                view. postDelay ((new Runnable() {
2                        @Override
3                        public void run() {
4                                textView.setText('HelloWorld');
5                                //所有的代碼都會(huì)在UI線程中執(zhí)行
6                        }
7                }, 1000);// 延遲1秒執(zhí)行

3)AsyncTask

        AsyncTask是對(duì)Android線程模型的一種高度封裝,,而且使用java的泛型技術(shù),使用非常方便,,而且能夠解決通用問題,。在使用AsyncTask類時(shí),需要擴(kuò)展它并實(shí)現(xiàn)以下幾個(gè)方法:

public void onPreExecute() 在UI線程中執(zhí)行,,進(jìn)行以下初始化操作
public Result doInBackground(Params... params) 在后臺(tái)線程中執(zhí)行
public void onProgressUpdate(Progress... values) 在UI線程中執(zhí)行,,通知UI線程更新界面
public void onPostExecute(Result result) 任務(wù)結(jié)束后,在UI線程中執(zhí)行
public void onCancelled () 任務(wù)取消時(shí),,在UI線程中執(zhí)行

        AsyncTask 使用了Java的泛型技術(shù),,所以在使用時(shí)需要使用具體的類型,一般的使用方法代碼如下:
        
01public class UserTask extends AsyncTask < string,="" void,="" void=""> {
02        @Override
03        public void onPreExecute() {
04            //初始化操作,,在主線程中執(zhí)行
05        }
06           @Override
07        public Result doInBackground(String... params) {
08           //在后臺(tái)線程中執(zhí)行任務(wù)
09        }
10        @Override
11        public void onCancelled() {
12                 //取消任務(wù)時(shí)的回調(diào)
13        }
14        @Override
15        public void onPostExecute() {
16            //任務(wù)執(zhí)行結(jié)束時(shí)的回調(diào),,在主線程中執(zhí)行
17        }
18}

        在代碼中使用UserTask時(shí),必須要在UI線程中執(zhí)行execute方法,,代碼如下:

1        new UserTask ().execute(new String [] {“”});

4) IdlerHandler

        使用IdlerHandler可以向當(dāng)前線程的消息隊(duì)列里發(fā)送操作,,這些操作之后在空閑的時(shí)候才會(huì)執(zhí)行,它們的優(yōu)先級(jí)非常低。需要注意的是queueIdle的方法可以返回一個(gè)布爾值,,如果返回false,,說明IdleHandler執(zhí)行一次之后就會(huì)被刪除,如果返回true,,說明IdleHandler一直是有效的,,只要系統(tǒng)處于空閑狀態(tài)就執(zhí)行IdleHandler的queueIdle方法。使用方式如下:
               
1                Looper.myQueue().addIdleHandler(new IdleHandler() {
2                        @Override
3                        public boolean queueIdle() {
4                                //系統(tǒng)空閑時(shí)進(jìn)行資源回收操作
5                                return false;
6                        }
7                });

5) Handler

        Handler是Android消息模型最重要的一個(gè)組件,,使用它可以在線程之間相互發(fā)送消息,,實(shí)現(xiàn)線程之間的通信。處理使用Handler發(fā)送消息以外,,通常需要繼承Handler類,,并重寫handleMessage(Message msg) 方法, 接收消息并處理消息。
下面通過一個(gè)實(shí)例來說明Handler的使用方法,。例子的主要功能是:通過線程修改界面Button的內(nèi)容,,完整的代碼如下:

01public class MyHandlerActivity extends Activity {
02 
03    Button button;
04    MyHandler myHandler;
05 
06    protected void onCreate(Bundle savedInstanceState) {
07        super.onCreate(savedInstanceState);
08        setContentView(R.layout.handlertest);
09        button = (Button) findViewById(R.id.button);
10        myHandler = new MyHandler();
11        // 當(dāng)創(chuàng)建一個(gè)新的Handler實(shí)例時(shí), 它會(huì)綁定到當(dāng)前線程和消息的隊(duì)列中,開始分發(fā)數(shù)據(jù)
12        // Handler有兩個(gè)作用,
13           //(1) : 定時(shí)執(zhí)行Message和Runnalbe 對(duì)象
14        // (2): 讓一個(gè)動(dòng)作,在不同的線程中執(zhí)行.
15        // 它安排消息,用以下方法
16        // post(Runnable)
17        // postAtTime(Runnable,long)
18        // postDelayed(Runnable,long)
19        // sendEmptyMessage(int)
20        // sendMessage(Message);
21        // sendMessageAtTime(Message,long)
22        // sendMessageDelayed(Message,long)
23        // 以上方法以 post開頭的可以處理Runnable對(duì)象
24        //sendMessage()可以處理Message對(duì)象(Message里可以包含數(shù)據(jù),)
25        MyThread m = new MyThread();
26        new Thread(m).start();
27    }
28 
29    /**
30    * 接受消息,處理消息 ,此Handler會(huì)與當(dāng)前主線程一塊運(yùn)行
31    * */
32    class MyHandler extends Handler {
33        
34           //默認(rèn)構(gòu)造函數(shù)
35           public MyHandler() {
36                  super();
37        }
38         
39           // 帶有Looper參數(shù)的構(gòu)造函數(shù)
40           public MyHandler(Looper L) {
41            super(L);
42        }
43        // 子類必須重寫此方法,處理消息
44        @Override
45        public void handleMessage(Message msg) {
46            Log.d('MyHandler', 'handleMessage......');
47            super.handleMessage(msg);
48            // 此處可以更新UI
49            Bundle b = msg.getData();
50            String color = b.getString('color');
51                   String btn = msg.obj.toString();
52            MyHandlerActivity.this.button.append(color + btn);
53        }
54    }
55 
56    class MyThread implements Runnable {
57        public void run() {
58            try {
59                Thread.sleep(2000);
60            } catch (InterruptedException e) {
61                // TODO Auto-generated catch block
62                e.printStackTrace();
63            }
64            Log.d('thread.......', 'mThread........');
65                   // 使用Message能夠傳遞多種數(shù)據(jù)具體可以參考Message的源碼
66                   // 最常用的可以使用Message的obj對(duì)象在線程之間傳遞對(duì)象數(shù)據(jù)
67            Message msg  =  new Message();
68            Bundle b = new Bundle();// 存放數(shù)據(jù)
69            b.putString('color', 'Red');
70            msg.setData(b);
71                   msg.obj = new String(“Button”);
72            MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler發(fā)送消息,更新UI
73        }
74    }
75}

        根據(jù)以上JAVA代碼編寫Demo(Handler_Test),Demo的運(yùn)行效果如下圖所示:

QQ截圖20120620150010.png

2012-6-20 15:40:29 上傳
下載附件 (174.76 KB)

圖9-12  Demo運(yùn)行效果圖1


        三秒鐘之后,,Button上的文字發(fā)生變化,,效果如下圖所示:

1.png

2012-6-20 16:45:05 上傳
下載附件 (199.88 KB)

圖9-13  Demo運(yùn)行效果圖2


6) HandlerThread

        HandlerThread是一個(gè)帶有消息循環(huán)的線程,并且有自己的消息隊(duì)列,,能夠接受其他線程發(fā)送消息,。使用方法Java代碼如下:
               
01                HandlerThread tt = new HandlerThread('handlerThread');
02                tt.start();//啟動(dòng)線程
03                Handler handler = new Handler(tt.getLooper());
04                handler.postDelayed(new Runnable() {
05 
06                        @Override
07                        public void run() {
08                                System.out.println('ThreadName:' + Thread.currentThread().getName());
09                                ((HandlerThread)Thread.currentThread()).getLooper().quit();//關(guān)閉消息循環(huán),退出線程
10                        }
11 
12                }, 1000);


Demo源代碼下載:
游客,,如果您要查看本帖隱藏內(nèi)容請(qǐng)回復(fù)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多