内容简介:
相信大家都用过Handler+Thread的方式开发过Android应用程序。
在Android系统中,是支持多线程的。UI线程时主线程,用户也可以定义多个线程,他们之间也可以进行通信,正如java一样。
使用多线程,我们可以最大化的利用系统资源,提高应用程序的相应速度,增强用户体验。与Java中的多线程相比,几乎没有什么变化,
需要注意的是,只要把Java中的线程概念弄明白,Android也不在话下。
常用的方法:
常用的线程方法有:
start();
run();
sleep();
stop();
destroy();
join();
suspend();
resume();
yield();
wait();
notify();
其中,start用于启动线程;run用于执行线程中的核心代码;sleep用于线程休眠;stop停止线程;destroy销毁线程;
join用于线程同步;
run结束时线程自动死亡。
举例:
这里我使用一个线程来计算变量并更新窗口标题。
这里没有使用updatetitle直接更新窗口,而是使用handler,这是因为直接使用是不安全的,会造成线程重启等问题。Android 引进了Handler 这个特殊的类,用它作为Runnable和Activity交互的桥梁,所以我们只能在run方法中发送Message,而在Handler里,通过不同的Message执行不同的任务。为程序添加handler;
线程还有另外一种常用的方法是编写Runnable接口,这里对代码做一些修改,使用线程实现对主窗口重绘,全部代码如下:
package com.example.app1;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import java.lang.Thread;
import android.view.View;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
public class TestThreadActivity extends Activity {
int c = Color.BLUE;
MyThread myThread;
volatile boolean bThreadRun = false;
MyView mv;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
mv = new MyView(this);
setContentView(mv);
}
//MyView的定义
public class MyView extends View {
MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
// 首先定义一个paint
Paint paint = new Paint();
// 绘制矩形区域-实心矩形
// 设置颜色
paint.setColor(c);
// 设置样式-填充
paint.setStyle(Style.FILL);
// 绘制一个矩形
canvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);
}
}
@Override
protected void onRestoreInstanceState(android.os.Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
@Override
protected void onSaveInstanceState(android.os.Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onStart() {
super.onStart();
//myThread = new MyThread();
//myThread.start();
new Thread(new MyThread()).start();
bThreadRun = true;
}
@Override
protected void onRestart() {
super.onRestart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
bThreadRun = false;
// myThread.stop();
}
@Override
protected void onStop() {
super.onStop();
onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
// myThread.destroy();
}
//线程的定义
public class MyThread implements Runnable {
// 线程的主要工作方法
@Override
public void run() {
while (bThreadRun) {
try {
Thread.sleep(500);
if (c > ((1 << 31) - 1)) {
c = 0;
} else {
c += 100;
}
mv.postInvalidate();
} catch (InterruptedException e) {
}
}
}
}
}