安卓的多线程和java的多线程操作一样
有两种实现方法:
继承Thread类,重写run方法 实现Runnable接口,重写run方法
两种方法的线程启动需要调用start方法而不是run,否则相当于一个普通方法而非线程
继承Thread类:直接new然后调用start方法
private class MyThread extends Thread {
@Override
public void run ( ) {
Log. e ( "MyThread的run方法" , Thread. currentThread ( ) . getName ( ) ) ;
result = fib ( 25 ) ;
Log. e ( "斐波那契数列第n项的值为:" , result + "" ) ;
Message message = new Message ( ) ;
message. what = 100 ;
message. obj = result;
mainHandler. sendMessage ( message) ;
}
}
new MyThread ( ) . start ( ) ;
实现Runnable接口:new出来当作Thread类的构造参数,再调用start方法
private class MyRunnable implements Runnable {
@Override
public void run ( ) {
Log. e ( "MyRunnable" , "run方法" ) ;
Log. e ( "MyRunnable" , Thread. currentThread ( ) . getName ( ) ) ;
}
}
new Thread ( new MyRunnable ( ) ) . start ( ) ;
注意:在子线程中无法操作Activity的组件,想操作需要借助Handler
需要一下三步:
创建Handler的匿名子类对象 发送消息给UI线程 处理信息
private Handler mainHandler = new Handler ( ) {
@Override
public void handleMessage ( @NonNull Message msg) {
Log. e ( "handleMessage方法" , Thread. currentThread ( ) . getName ( ) ) ;
switch ( msg. what) {
case 100 :
resultTv. setText ( msg. obj + "" ) ;
break ;
}
}
} ;
Message message = new Message ( ) ;
message. what = 100 ;
message. obj = result;
mainHandler. sendMessage ( message) ;
PS:网络操作等耗时操作必须放在子线程