今日小记:Handler和Thread

实现功能:通过点击button,将文字“data”更新为“the data from network”

由于只有主线程Main Thread中才能操作ui,故不建议在子线程中使用TextView.setText();方法。

因此可以通过Handler来处理更新文字。

 

MainActivity.java文件

package com.joe.handler01;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
 private TextView textview;
 private Button button;
 private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = (TextView)findViewById(R.id.text);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new Buttonlistener());
        handler = new Fhandler();
    }
    
    //主线程
     class Fhandler extends Handler{
     @Override
     public void handleMessage(Message msg) {
      //system.out.println(Thread.currentThread().getNme());可得知其为主线程
      String s  = (String)msg.obj;
      textview.setText(s);
     }
    }
   //子线程 
    class NetWorkthread extends Thread{
     @Override
     public void run() {
      //system.out.println(Thread.currentThread().getNme());可得知其为子线程
      try {
        Thread.sleep(2*1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
      String s = "the data from network";
      Message msg = handler.obtainMessage();
      msg.obj = s;
      handler.sendMessage(msg);
     }
    }
    class Buttonlistener implements OnClickListener{
     @Override
     public void onClick(View v) {
     
      Thread t = new networkthread();
      t.start();
     }
    }
    
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
 <TextView 
     android:id="@+id/text"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="data"/>
  <Button 
     android:id="@+id/button"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_below="@id/text"
     android:text="click"/>
</RelativeLayout>

你可能感兴趣的:(今日小记:Handler和Thread)