Android 多线程编程

简介: Android 多线程编程文章目录线程的调用实现Runnable接口定义一个线程使用匿名内部类的方法启动子线程在子线程中更新主线程参数异步信息处理机制使用异步信息处理机制解析异步信息处理机制AsyncTask使用AsyncTask线程的调用实现Runnable接口定义一个线程class MyThr...

Android 多线程编程
文章目录
线程的调用
实现Runnable接口定义一个线程
使用匿名内部类的方法启动子线程
在子线程中更新主线程参数
异步信息处理机制
使用异步信息处理机制
解析异步信息处理机制
AsyncTask
使用AsyncTask
线程的调用
实现Runnable接口定义一个线程
class MyThread implements Runnable
{

@Override
public void run()
{
    //处理具体的逻辑
}

}

启动MyThread

MyThread myThread = new MyThread();
new Thread(myThread).start();
1
2
使用匿名内部类的方法启动子线程
new Thread(

new Runnable()
{
    @Override
    public void run()
    {
        //处理具体的逻辑
    }
}

).start();

在子线程中更新主线程参数
子线程不能直接修改主线程中的变量,否者会出现异常。

异步信息处理机制
使用异步信息处理机制
首先定义一个整形常量UPDATE_DATA。

public static final int UPDATE_DATA = 1;
1
新增一个Handler对象,并重写父类的handleMessage()方法。

private Handler handler = new Handler()
{

public void handleMessage(Message msg)
{
    switch (msg.what)
    {
        case UPDATE_DATA:
            //这里可以进行主线程中的变量操作
            
            break;
        
        default:
            break;
    }
}

}

在单击事件中开启子线程,在“具体的逻辑”执行完成后,创建一个Message对象,将Message对象的what字段的值指定为UPDATE_DATA,将Message对象发送出去。
很快,Handler就会收到这条Message,并在handleMessage()方法中对它进行处理。

new Thread(

new Runnable()
{
    @Override
    public void run()
    {
        //处理具体的逻辑
        Message message = new Message(); //创建一个Message对象
        message.what = UPDATE_DATA; //将Message对象的what字段的值指定为UPDATE_DATA
        handler.sendMessage(message); //将Message对象发送出去
    }
}

).start();

解析异步信息处理机制
AsyncTask
对于在子线程中使用主线程中的变量,Android提供了一个更方便的工具:AsyncTask。
即使对异步消息处理机制完全不了解,也可以十分简单的从子线程切换到主线程。

使用AsyncTask
AsyncTask是一个抽象类,在继承时我们可以为AsyncTask类指定3个泛型参数。
Params:在执行AsyncTask时,需要传入的参数,可用于在后台任务中使用
Progress:后台任务执行时,如果需要再界面上显示当前进度,则使用这里指定的泛型作为进度单位。
Result:当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。

//Void:表示在执行AsyncTask的时候不需要传入参数给后台任务
//Integer:表示使用整型数据来作为进度显示单位
//Boolean:表示使用布尔型数据来反馈执行结果
class DownloadTask extends AsyncTask
{

...

}

重写AsyncTask中的几个方法,完成对任务的定制
doInBackground():中执行具体的耗时任务
onProgressUpdate():中进行主线程变量操作
onPostExecute():中做执行一些任务的收尾工作

class DownloadTask extends AsyncTask
{

@Override
protect void onPreExecute()
{
    /*
     *这个方法会在后台任务开始执行之前调用,
     *用于进行一些界面上的初始化操作,
     *比如显示一个进度条对话框等。
     */
}

@Override
protect Boolean doInBackground(Void ... params)
{
    /*
     *这个方法中的所有代码都会在子线程中运行,我们应该在这里去处理所有耗时任务。
     *任务一旦完成,就可以通过return语句来将任务的执行结果返回。
     *如果AsyncTask的第三个泛型参数指定的是Void,则可以不返回任务执行结果。
     *
     *在这个方法中不可以对主线程的变量进行操作。
     */
     
     //用于调用opProgressUpdate()方法
     publishProgress(Progress ...);
}

@Override
protect void onProgressUpdate(Integer ... values)
{
    /*
     *当后台任务中调用了publishProgress(Progress ...)方法后,
     *onProgressUpdate(Progress ...)方法很快就会被调用。
     *该方法中携带的参数是在后台任务中传递过来的。
     *
     *在这个方法中可以对主线程的变量进行操作。
     */
}

@Override
protect void onPostExecute(Boolean result)
{
    /*
     *当后台任务执行完毕,并通过return语句进行返回时,
     *这个方法很快就会被调用。
     *返回的数据会作为参数传递到此方法中,
     *可以利用返回的数据做一些对主线程变量的操作。
     */
}

}

如果想要启动这个任务,只需要编写以下代码即可:

new DownloadTask().execute();

作者:zzsj1990
来源:CSDN
原文:https://blog.csdn.net/zzsj1990/article/details/90767742
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
1月前
|
Java 调度 Android开发
构建高效Android应用:探究Kotlin多线程编程
【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
41 4
|
1月前
|
API 数据库 Android开发
构建高效Android应用:探究Kotlin多线程优化策略
【2月更文挑战第14天】随着移动设备性能的日益强大,用户对应用程序的响应速度和流畅性要求越来越高。在Android开发中,合理利用多线程技术是提升应用性能的关键手段之一。Kotlin作为一种现代的编程语言,其协程特性为开发者提供了更为简洁高效的多线程处理方式。本文将深入探讨使用Kotlin进行Android多线程编程的最佳实践,包括协程的基本概念、优势以及在实际项目中的应用场景和性能优化技巧,旨在帮助开发者构建更加高效稳定的Android应用。
|
3月前
|
Java 调度 数据库
Android 性能优化: 如何进行多线程编程以提高应用性能?
Android 性能优化: 如何进行多线程编程以提高应用性能?
47 0
|
7月前
|
存储 SQL 安全
Android面试中问的线程相关问题
Android面试中问的线程相关问题
40 0
|
12天前
|
Java API 调度
安卓多线程和并发处理:提高应用效率
【4月更文挑战第13天】本文探讨了安卓应用中多线程和并发处理的优化方法,包括使用Thread、AsyncTask、Loader、IntentService、JobScheduler、WorkManager以及线程池。此外,还介绍了RxJava和Kotlin协程作为异步编程工具。理解并恰当运用这些技术能提升应用效率,避免UI卡顿,确保良好用户体验。随着安卓技术发展,更高级的异步处理工具将助力开发者构建高性能应用。
|
23天前
|
安全 Linux API
Android进程与线程
Android进程与线程
18 0
|
1月前
|
Java Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【2月更文挑战第17天】 随着移动设备性能的不断提升,用户对应用的响应速度和稳定性要求越来越高。在Android开发中,Kotlin语言以其简洁、安全的特点受到开发者青睐。然而,面对复杂的多线程任务,如何有效利用Kotlin进行优化,以提升应用性能,是本文探讨的重点。通过分析Kotlin并发工具的使用场景与限制,结合实例演示其在Android开发中的实践,旨在为开发者提供实用的多线程处理指南。
|
8月前
|
Android开发
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
Android 中ProgressDialog进度条对话框的使用(使用子线程模拟更新进度)
101 0
|
8月前
|
安全 Java Android开发
Android 中AsyncTask后台线程,异步任务的理解
Android 中AsyncTask后台线程,异步任务的理解
101 0
|
4月前
|
XML Java 调度
Android App网络通信中通过runOnUiThread快速操纵界面以及利用线程池Executor调度异步任务实战(附源码 简单易懂)
Android App网络通信中通过runOnUiThread快速操纵界面以及利用线程池Executor调度异步任务实战(附源码 简单易懂)
31 0