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对象
  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/zhoushasha/p/11432371.html
Copyright © 2011-2022 走看看