[Android]Thread线程入门1

在Android中Thread可是经常要用到的啊。

一、建立一个简单的Thread
初始界面如下:


点击Test按钮后,开启一个线程。这个线程,将“Hello World...”字符串修改成另外一个字符串。如下图所示。

布局文件如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns: android = "http://schemas.android.com/apk/res/android"
    android: layout_width = "fill_parent"
    android: layout_height = "fill_parent"
    android: orientation = "vertical" >

    < TextView
        android: layout_width = "fill_parent"
        android: layout_height = "wrap_content"
        android: text = "@string/hello"
        android: id = "@+id/txtShow" />
   
    < Button android: id = "@+id/btnTest"
        android: layout_width = "wrap_content"
        android: layout_height = "wrap_content"
        android: text = "Test" />
</ LinearLayout >
源代码如下:
public class TestThreadActivity extends Activity {
    private Handler mHandler;
    private TextView mTextView;
    private Button mButton;
   
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super . onCreate( savedInstanceState);
        setContentView( R . layout . main);
       
        mTextView = ( TextView) findViewById( R . id . txtShow);
        mButton = ( Button) findViewById( R . id . btnTest);
       
        mButton . setOnClickListener( new View . OnClickListener() {
           
            public void onClick( View v) {
                startThread();
            }
        });
    }
   
    private void startThread()
    {    
        mHandler = new Handler();
        //1秒刷新一次
       
mHandler . postDelayed ( changeText , 1000 );
    }
   
    private Runnable changeText = new Runnable () {
        public void run ()
        {
            mTextView . setText ( "This is a thread example." );
        }
    };
   
}
这就是一个简单的线程例子了。
二、如何释放线程。
很简单。调用removeCallbacks就可以了。源代码如下:
@Override
public void onDestroy()
{
    if( mHandler != null)
    {
        try
        {
            mHandler . removeCallbacks( changeText);
        }
        catch( Exception e)
        {
            //do nothing, don't crash
        }
    }
    super . onDestroy();
}
 
三、Thread+Message+Handler实现同样效果
和上面同样的效果。点击按钮后,改变文字。Layout不变,源代码如下:
public class TestThreadActivity extends Activity {
    private Handler mHandler;
    private TextView mTextView;
    private Button mButton;
   
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super . onCreate( savedInstanceState);
        setContentView( R . layout . main);
       
        mTextView = ( TextView) findViewById( R . id . txtShow);
        mButton = ( Button) findViewById( R . id . btnTest);
       
        mButton . setOnClickListener( new View . OnClickListener() {            
            public void onClick( View v) {                
                TestMessageThread thread = new TestMessageThread();
                thread . start();
               
                mHandler = new Handler()
                {
                    @Override
                    public void handleMessage( Message msg)
                    {
                        mTextView . setText(( msg . obj ). toString());
                    }
                };
            }
        });
    }
   
    private class TestMessageThread extends Thread
    {
        @Override
        public void run()
        {
            //do something
            Message msg = new Message();
            msg . obj = "This is a thread example.";
            //send message
            mHandler . sendMessage( msg);
        }
    }
}

如何释放这里用到的线程呢?这就要用到线程的interrupt函数了。源代码如下: public class TestThreadActivity extends Activity {
 

  private Handler mHandler = null;;
    private TestMessageThread mThread = null;
    private TextView mTextView;
    private Button mButton;
   
    @Override
    public void onCreate( Bundle savedInstanceState) {
        super . onCreate( savedInstanceState);
        setContentView( R . layout . main);
       
        mTextView = ( TextView) findViewById( R . id . txtShow);
        mButton = ( Button) findViewById( R . id . btnTest);
       
        mButton . setOnClickListener( new View . OnClickListener() {
           
            public void onClick( View v) {
                //startThread();
                mThread = new TestMessageThread();
                mThread . start();
               
                mHandler = new Handler()
                {
                    @Override
                    public void handleMessage( Message msg)
                    {
                        mTextView . setText(( msg . obj ). toString());
                    }
                };
            }
        });
    }
   
    @Override
    public void onDestroy()
    {
        super . onDestroy();
        if( mThread != null)
        {
            try
            {
                mThread . interrupt();                
            }
            catch( Exception e)
            {
                //do nothing, don't crash
            }
        }
    }
   
    private class TestMessageThread extends Thread
    {
        @Override
        public void run()
        {
            //do something
            Message msg = new Message();
            msg . obj = "This is a thread example.";
            //send message
            mHandler . sendMessage( msg);
        }
    }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值