zoukankan      html  css  js  c++  java
  • Android多线程编程

    一.线程的三种使用方法

    1.新建一个类继承自Thread,然后重写父类的run()方法,在run()方法中编写耗时逻辑,如下所示:

    class MyThread()extends Thread{

    @Override

    public void run(){

    //耗时操作

    }

    }

    开启这个线程的方法:new出这个MyThread类的实例,调用strart()方法,new  MyThread().start()

    2.新建一个类实现Runnable接口的方式定义一个线程,如下所示:

    class MyThread implements Runnable{

    @Override

    public void run(){

    //具体的逻辑操作

    }

    }

    开启线程的方法:MyThread myThread=new MyThread(); new Thread(myThread) .start();

    3.使用匿名类的方式开启线程是最常见的使用方法,如下所示:

    new Thread(new Runnable(){

    @Override

    public void run(){

    //处理具体的逻辑

    }

    }).start();

    Android确实是不允许在子线程中进行UI操作的,对于这种情况,Android提供了一套异步消息处理机制,解决子线程中进行的UI操作问题。

    package com.example.zss.android_thread;

    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private TextView text;
    private Button changeText;
    //定义一个整形常量
    private static final int UPDATE_TEXT=1;
    private Handler handler =new Handler(){
    public void handleMessage(Message msg){
    switch (msg.what){
    case UPDATE_TEXT:
    //在这里执行UI操作
    text.setText("Nice to meet you");
    break;
    default:
    break;
    }
    }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    text=(TextView)findViewById(R.id.text);
    changeText=(Button)findViewById(R.id.change_text);
    changeText.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.change_text:
    //写一个匿名内部类
    new Thread(new Runnable() {
    @Override
    public void run() {
    Message message=new Message();
    message.what=UPDATE_TEXT;
    handler.sendMessage(message);
    }
    }).start();
    break;
    }

    }
    }
    二,异步消息处理机制
    Android中的异步消息处理机制主要由四个部分组成,Message,Handler,MessageQueue和Looper组成
    1.Message是在线程之间传递的消息,可以在内部携带少量的信息,用于不同线程之间交换数据。
    2.Handler是一个处理者,主要用于发送和处理消息,发送消息一般是使用Handler的sendMessage()方法,发出的消息最终会传递到Handler的handleMessage()方法中
    3.MessageQueue是消息队列的意思,主要用于存放所有通过Handler发送的消息,每个线程中只有一个MessageQueue对象
    4,Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无线循环当中,然后每当发现MessageQueue中存在一条消息,就会把它取出,传递到Handler的HandlerMessage()方法中,
    每个线程中也只会有一个Looper对象
  • 相关阅读:
    vue实现图片预览旋转/放大缩小/上下切换等功能
    VMware安装遇到的问题
    webstrom弹出Server's certificate is not trusted 解决方法
    this.setData is not a function;at pages/index/index onLoad function;at api request success callback function TypeError: this.setData is not a function
    小程序结构目录
    第一个微信小程序
    用C#开发ActiveX控件给VB使用
    处理WIN7,winxp下安装vb6,出现config.nt 无法运行16位DOS程序故障的方法
    VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
    程序全屏开机运行,不允许操作电脑桌面,适用工控机触摸屏
  • 原文地址:https://www.cnblogs.com/zhoushasha/p/11432371.html
Copyright © 2011-2022 走看看