Android Handler 訊息機制的日常開發運用與代碼測試

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   ar   os   java   

很多時候我們需要對每個組件或者所有的UI線程要去負責View的建立並且維護它,例如更新冒個TextView的顯示,都必須在主

線程中去做,我們不能直接在UI線程中去建立子線程,要利用訊息機制:handler

本篇部落格將帶大家走進我們熟悉的Handler,順帶寫了一個例子來驗證Handler的訊息機制,Handler通過對子線程的處理,實

現對UI的更新等操作

private TextView time;            private Handler handler = new Handler(){            public void handleMessage(Message msg) {            if(msg.what==Reflsh){            time.setText(String.valueOf(msg.obj));            }            super.handleMessage(msg);            };            };            @Override            public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            text = getResources().getStringArray(R.array.array);            for(int i=0;i<text.length;i++){            Map<String,Object> map = new HashMap<String, Object>();            map.put("img", icon[i]);            map.put("name", text[i]);            list.add(map);            }            adapter = new SimpleAdapter(getActivity(), list, R.layout.log, new String[]{"img","name"}, new int []{R.id.g_icon,R.id.g_text});            }@Override            public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {             View view = inflater.inflate(R.layout.fragment_shouye, container, false) ;             gridview = (GridView)view.findViewById(R.id.gridView);             time = (TextView)view.findViewById(R.id.time);//時間             ImageView icon = (ImageView)view.findViewById(R.id.icon);//頭像             TextView name = (TextView)view.findViewById(R.id.name);//暱稱//                File file = new File(Environment.getExternalStorageDirectory()+"/"+"weiinfo") ;   BufferedReader reader = null ;   String line = null ;   try {    reader = new BufferedReader(new FileReader(file)) ;    line = reader.readLine() ;   } catch (Exception e) {   e.printStackTrace();   }              data = line.split("\\*") ;                          Picasso.with(getActivity().getApplicationContext()).load(data[5]).into(icon);             name.setText(data[0]);             new Thread(new Runnable() {@Overridepublic void run() {try {while(true){Thread.sleep(1000);Message msg = new Message();msg.what = Reflsh;msg.obj = new Date(System.currentTimeMillis()).toLocaleString();Log.d("XXXXXXXXXXXXXX", msg.obj.toString());handler.sendMessage(msg);}} catch (Exception e) {Log.d("異常", ""+e);}}}).start();

上面測試Handler的代碼是來自MaoZhuaWeiBo的首頁介面的動態北京時間示範,我寫了一個Handler來處理我new 出來的子線程,在子線程裡我每休眠一秒執行擷取一次模擬器當前系統時間,並且將訊息發送至Handler處理,Handler將訊息更新view同步更新,並且不會阻塞主UI,這就是Handler訊息機制的好處!


訊息機制列印結果:



一直到關閉這個應用程式為止,列印結果才會停止,這就是Handler的訊息機制了~


Android Handler 訊息機制的日常開發運用與代碼測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.