[Android]Thread线程入门1
16lz
2021-01-23
在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 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);
}
}
}
更多相关文章
- 【Android】Android 监听网络状态+源代码
- Android 子线程更新UI的几种方法
- android 线程 synchronized关键字
- Android里子线程真的不能刷新UI吗?
- android 多线程处理UI
- Android的线程使用来更新UI------Thread Handler Looper TimerTa