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对象

原文地址:https://www.cnblogs.com/zhoushasha/p/11432371.html

时间: 2024-10-20 22:01:46

Android多线程编程的相关文章

Android多线程编程(一)——多线程基础

什么是进程 一个进程是一个独立(self contained)的运行环境,它可以看作一个程序或者一个应用. 什么是线程 而线程是进程中执行的一个任务,Java运行环境是一个包含了不同累和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. Android线程 Android的线程,实际上和Java的多线程编程并没有什么本质上的不同.当我们需要执行一些耗时操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们的请求,如

Android多线程编程之线程池学习篇(一)

Android多线程编程之线程池学习篇(一) 一.前言 Android应用开发中多线程编程应用比较广泛,而应用比较多的是ThreadPoolExecutor,AsyncTask,IntentService,HandlerThread,AsyncTaskLoader等,为了更详细的分析每一种实现方式,将单独成篇分析.后续篇章中可能涉及到线程池的知识,特此本篇分析为何使用线程池,如何使用线程池以及线程池的使用原理. 二.Thread Pool基础 进程代表一个运行中的程序,一个运行中的Android

android: 多线程编程基础

9.1   服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行. 不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务 时所在的应用程序进程.当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停 止运行. 另外,也不要被服务的后台概念所迷惑,实际上服务并不会

Android多线程编程方法及开启步骤

作者:华清远见讲师 实现线程的两种方式 使用继承的方法 class MyThread extends Thread{ @Override public void run(){ //处理具体的逻辑 } } 要启动这个线程,在主线程中新建一个该实例,调用其start()方法即可. 使用实现Runnable借口的方式 class MyThread implements Runnable{ @Override public void run(){ //处理具体的逻辑 } } 开启现成时,使用: MyTh

Android 多线程编程初探

Android 中的多线程其实就是 JavaSE 中的多线程,只是为了方便使用,android 封装了一些类,如 AsyncTask.HandlerThread 等,在日常的开发过程中,我们往往需要去执行一些耗时的操作,例如发起网络请求,考虑到网速等其他外在的因素,服务器可能不会立刻响应我们的请求,如果不将这条操作放到子线程中去执行,就会造成主线程被阻塞,今天我们就从多线程的基础来一起探讨 一.线程的基本用法   对于 Andorid 多线程来说我们最新接触到的就是 Thread 和 Runna

android ——多线程编程

1.定义一个线程只需要新建一个类继承自Thread.然后重写run()方法,并在里面编写耗时逻辑即可: class MyThread extends Thread{ public void run(){ //处理具体的逻辑 } } 启动的时候只需要new出MyThread的实例,然后调用它的start()方法,这样run()中写的代码就会在子线程中进行: new Mythread().start(); 2.更多时候使用实现Runnable接口的方式来定义一个线程 class MyThread i

Android——多线程编程练习题

随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实现. layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a

Android开发实践:多线程编程小结

我们知道,Android系统为了提高程序的实时响应能力,不允许在UI线程中进行耗时的操作,否则会出现ANR异常,因此必须将耗时的任务放到非UI线程中执行.Android/Java提供了很多类来帮助大家完成异步操作,比如:Thread类,Timer类,AsyncTask类,HandlerThread类,以及Executor接口.这些类都分别在什么场合下使用呢? 本文简单地总结一下Android开发中常见的多线程类型和解决方案,并比较和分析了各个方案的区别,以便更好地理解和应用这些API接口. 1.

Android 并发编程:(一)基础知识 —— 架构和组件

本章节所有内容皆为原创,如需转载,请注明出处. http://blog.csdn.net/manoel/article/details/38462631 写在前面的话 很久没写博客了,一是因为自身水平有限,怕误人子弟:二是因为感觉没什么可写的:三是因为时间有限,要寻找工作.学习和生活之间的平衡. 最近一直在研究和梳理Android多线程编程的东西,希望能够把这些分享给大家. 想必做过Android应用开发的同学应该都会知道,多线程是一个特别"诡异"的地方.之所以称为"诡异&q