首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 12431|回復(fù): 0
上一主題 下一主題
[教程]

第二十七講:Handler使用入門

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1790
本講內(nèi)容:Handler使用入門
當(dāng)用戶點擊一個按鈕時如果執(zhí)行的是一個常耗時操作的話,處理不好會導(dǎo)致系統(tǒng)假死,用戶體驗很差,而Android則更進一步,如果任意一個Acitivity沒有響應(yīng)5秒鐘以上就會被強制關(guān)閉,因此我們需要另外起動一個線程來處理長耗時操作,而主線程則不受其影響,在耗時操作完結(jié)發(fā)送消息給主線程,主線程再做相應(yīng)處理。那么線程之間的消息傳遞和異步處理用的就是Handler。
下面我們通過一個模擬文件下載的這個長耗時操作來做個說明:
1、新建一個項目 Lesson27_Handler
2、在MainHandler.java中寫如下面內(nèi)容:
   
  1. package android.basic.lesson27;   
       
    import android.app.Activity;   
    import android.app.ProgressDialog;   
    import android.content.res.Resources;   
    import android.os.Bundle;   
    import android.os.Handler;   
    import android.os.Message;   
    import android.util.Log;   
    import android.view.View;   
    import android.widget.Button;   
       
    public class MainHandler extends Activity {   
       
            //聲明變量   
            private Button b1;   
            private ProgressDialog pd;   
       
            //定義Handler對象   
            private Handler handler =new Handler(){   
                    @Override   
                    //當(dāng)有消息發(fā)送出來的時候就執(zhí)行Handler的這個方法   
                    public void handleMessage(Message msg){   
                            super.handleMessage(msg);   
                            //只要執(zhí)行到這里就關(guān)閉對話框   
                            pd.dismiss();   
                    }   
            };   
       
            /** Called when the activity is first created. */   
        @Override   
        public void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
            setContentView(R.layout.main);   
       
            Resources res=  this.getResources();   
            //查看UI組件所在的線程名   
            Log.i("tag", "onCreate()-->"+Thread.currentThread().getName());   
       
            //定義UI組件   
            b1= (Button)findViewById(R.id.Button01);   
            //給按鈕綁定單擊事件監(jiān)聽器   
            b1.setOnClickListener(new View.OnClickListener() {   
       
                            @Override   
                            public void onClick(View v) {   
                                    //點擊按鈕后去處理長耗時操作   
                                    processThread();   
                            }   
                    });   
        }   
       
        private void processThread(){   
       
                //構(gòu)建一個下載進度條   
                pd= ProgressDialog.show(MainHandler.this, "下載文件", "正在下載……");   
                Log.i("tag", "processThread()-->"+Thread.currentThread().getName());   
       
                new Thread(){   
       
                        @Override   
                        public void run(){   
                                Log.i("tag", "run()-->"+Thread.currentThread().getName());   
                                //在新線程里執(zhí)行長耗時方法   
                                longTimeMethod();   
                                //執(zhí)行完畢后給handler發(fā)送一個空消息   
                                handler.sendEmptyMessage(0);   
                        }   
       
                }.start();   
        }   
       
        //模擬下載文件的長耗時方法   
        private void longTimeMethod(){   
                try {   
                        Log.i("tag", "longTimeMethod-->"+Thread.currentThread().getName());   
                            Thread.sleep(10000);   
                    } catch (InterruptedException e) {   
                            e.printStackTrace();   
                    }   
        }   
    }
復(fù)制代碼
  
3、res/layout/main.xml的內(nèi)容就省略了,你們可以根據(jù)程序運行截圖和程序代碼反推出來布局組件。
4、運行程序查看結(jié)果:
  
這個例子里,在輔助線程的run方法中執(zhí)行長耗時操作,操作完畢后調(diào)用handler.sendEmptyMessage()方法,主線程中的Handler的 handleMessage()方法接受到這一消息,并做了就是關(guān)閉對話框的處理。
在接下來的例子里,讓我們處理一些更復(fù)雜的操作來理解和練習(xí)Handler的使用方法。
(待續(xù))

上一篇:第二十八講:Android多媒體(Media)入門
下一篇:Android軟件開發(fā)之盤點所有Dialog對話框大合集(一)
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-12-28 00:57 , Processed in 0.052595 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表