关闭

[Android]Thread线程入门1

481人阅读 评论(0) 收藏 举报
分类:

在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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49098次
    • 积分:1323
    • 等级:
    • 排名:千里之外
    • 原创:85篇
    • 转载:7篇
    • 译文:0篇
    • 评论:3条
    最新评论