android线程使用

定义一个线程有两种方法:

新建一个继承于Thread的类,重写run方法(线程要执行的东西写里面),调用Thread实例的start方法即可启动,run执行完之后线程一般会自动结束,不可再次启动

1

2

3

4

6

7

class MyThread extends Thread{

    @Override

    public void run(){

        //线程里要执行的东西

    }

}

new MyThread().start();

  

新建一个继承于Thread的类,初始化时传入一个实现runnable接口的引用,在runnable接口中重写run方法,调用Thread实例的start方法即可启动

安卓的UI是线程不安全(多线程访问时没有保护,可能会出错)的,所以更新UI必须要在主线程进行,若在其他线程直接修改UI就会出错。

 

1

2

3

4

5

6

new Thread(new Runnable(){

    @Override

    public void run(){

   //线程里要执行的东西写这

    }

}).start();

  

异步消息处理机制

某一个线程创建handler对象,重写handleMessage用于处理其他线程发过来的消息,其他线程调用handler对象的sendMessage可以发送消息给创建handler的线程。

创建handler之前需要执行Looper.prepare()Looper.loop(),在UI线程中已经在启动时调用过了  故不需要重新调用。

 

以下为创建handler的代码(一般在主线程中创建)

Handler handler = new MyHandler() {

            @Override

            public void handleMessage(Message msg) {

                super.handleMessage(msg);

                if (msg.what == 1) {

                    //这里写处理代码

                }else if(msg.what==2){

                   

                }

                else if(msg.what==3){

                  

                }

            }

        };

 

以下为发送消息到Handler的代码

Message msg=new Message();

            msg.what=3;

            msg.obj=str1;//可以附带obj传过去

            handler.sendMessage(msg);//这里的handler必须为上面Handler创建的引用

 

UI线程之外不能直接更新UI,但有个类可以比较方便的使用 实现更新UI

runOnUiThread(new Runnable() {

            @Override

            public void run() {

                //这里的代码会在UI线程执行

            }

        });

 

猜你喜欢

转载自blog.csdn.net/sinat_30457013/article/details/89380756