[Android]Thread线程入门1
来源:互联网 发布:程序员包装简历 编辑:程序博客网 时间:2024/06/08 06:54
在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>
<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>
源代码如下:
publicclassTestThreadActivityextendsActivity{
privateHandlermHandler;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
startThread();
}
});
}
privatevoidstartThread()
{
mHandler = newHandler();
privateHandlermHandler;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
startThread();
}
});
}
privatevoidstartThread()
{
mHandler = newHandler();
//1秒刷新一次
mHandler.postDelayed(changeText,1000);
}
privateRunnable changeText = new Runnable() {
publicvoid run()
{
mTextView.setText("Thisis a thread example.");
}
};
}
mHandler.postDelayed(changeText,1000);
}
privateRunnable changeText = new Runnable() {
publicvoid run()
{
mTextView.setText("Thisis a thread example.");
}
};
}
这就是一个简单的线程例子了。
二、如何释放线程。
很简单。调用removeCallbacks就可以了。源代码如下:
@Override
publicvoidonDestroy()
{
if(mHandler!= null)
{
try
{
mHandler.removeCallbacks(changeText);
}
catch(Exceptione)
{
//do nothing, don't crash
}
}
super.onDestroy();
}
publicvoidonDestroy()
{
if(mHandler!= null)
{
try
{
mHandler.removeCallbacks(changeText);
}
catch(Exceptione)
{
//do nothing, don't crash
}
}
super.onDestroy();
}
三、Thread+Message+Handler实现同样效果
和上面同样的效果。点击按钮后,改变文字。Layout不变,源代码如下:
publicclassTestThreadActivityextendsActivity{
privateHandlermHandler;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
TestMessageThread thread = newTestMessageThread();
thread.start();
mHandler = newHandler()
{
@Override
publicvoidhandleMessage(Messagemsg)
{
mTextView.setText((msg.obj).toString());
}
};
}
});
}
privateclassTestMessageThreadextendsThread
{
@Override
publicvoidrun()
{
//dosomething
Messagemsg = newMessage();
msg.obj= "This is a threadexample.";
//sendmessage
mHandler.sendMessage(msg);
}
}
}
privateHandlermHandler;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
TestMessageThread thread = newTestMessageThread();
thread.start();
mHandler = newHandler()
{
@Override
publicvoidhandleMessage(Messagemsg)
{
mTextView.setText((msg.obj).toString());
}
};
}
});
}
privateclassTestMessageThreadextendsThread
{
@Override
publicvoidrun()
{
//dosomething
Messagemsg = newMessage();
msg.obj= "This is a threadexample.";
//sendmessage
mHandler.sendMessage(msg);
}
}
}
如何释放这里用到的线程呢?这就要用到线程的interrupt函数了。源代码如下:publicclassTestThreadActivityextendsActivity{
privateHandlermHandler= null;;
privateTestMessageThreadmThread= null;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
//startThread();
mThread = newTestMessageThread();
mThread.start();
mHandler = newHandler()
{
@Override
publicvoidhandleMessage(Messagemsg)
{
mTextView.setText((msg.obj).toString());
}
};
}
});
}
@Override
publicvoidonDestroy()
{
super.onDestroy();
if(mThread!= null)
{
try
{
mThread.interrupt();
}
catch(Exceptione)
{
//donothing, don't crash
}
}
}
privateclassTestMessageThreadextendsThread
{
@Override
publicvoidrun()
{
//dosomething
Messagemsg = newMessage();
msg.obj= "This is a threadexample.";
//sendmessage
mHandler.sendMessage(msg);
}
}
}
privateTestMessageThreadmThread= null;
privateTextViewmTextView;
privateButton mButton;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.txtShow);
mButton = (Button)findViewById(R.id.btnTest);
mButton.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(Viewv) {
//startThread();
mThread = newTestMessageThread();
mThread.start();
mHandler = newHandler()
{
@Override
publicvoidhandleMessage(Messagemsg)
{
mTextView.setText((msg.obj).toString());
}
};
}
});
}
@Override
publicvoidonDestroy()
{
super.onDestroy();
if(mThread!= null)
{
try
{
mThread.interrupt();
}
catch(Exceptione)
{
//donothing, don't crash
}
}
}
privateclassTestMessageThreadextendsThread
{
@Override
publicvoidrun()
{
//dosomething
Messagemsg = newMessage();
msg.obj= "This is a threadexample.";
//sendmessage
mHandler.sendMessage(msg);
}
}
}
- [Android]Thread线程入门1
- [Android]Thread线程入门2
- [Android]Thread线程入门3--多线程
- [Android]Thread线程入门4--多线程
- Android------线程thread
- Android 线程之Thread
- Android Thread线程
- Android 线程 thread
- Android 线程Thread的释放
- Android 线程Thread Runnable解析
- Android Thread Pool(线程池)
- android - Thread Pool线程池
- Android线程—Thread、Runnable
- android 线程状态 Thread类
- 线程Thread总结1
- 线程Thread学习1
- Thread 线程(1)
- 1、线程基础--Thread
- ASP入门---IIS的安装与配置
- Android自定义控件之AlertDialog
- 设置监听
- 关于Button的监听
- 【极客blog图文讲解】ruby以及Jekyll的环境配置(针对mac linux)
- [Android]Thread线程入门1
- NPOI
- [Android]Thread线程入门2
- [Android]Thread线程入门3--多线程
- [Android]Thread线程入门4--多线程
- XML 简介
- XML 的用途
- XML 树结构
- Mongodb持久化--journal探究