`

Android 多线程

阅读更多

1、简介

     多线程的用途是不言而喻的,例如,我们下载一个文件,在下载过程当前我们又要执行其他的操作。如果都放在主线程中,UI界面将不能操作,需要等待。

 

2、Android 平台下的多线程

     Android 平台下的线程分为主线程(也叫UI线程) 和 工作线程(非UI线程)。在Android 平台中 非UI线程 是不能访问UI线程中的View组件的。这个必须清楚。例如我们执行下面的代码就会报错。这个例子我们模拟一个下载场景,有一个下载按钮,一个其他操作按钮,一个TextView显示当前下载状态,当我们在工作线程中更新TextView文本内容是就会报错。

package com.powerise.thread;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	private Button downBtn;
	
	private TextView stateTextView;
	
	private DownloadThread dt;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        downBtn = (Button) findViewById(R.id.downBtn);
        
        stateTextView = (TextView) findViewById(R.id.stateTextView);
        
        dt = new DownloadThread();
        
        downBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				dt.start();
			}
		});
    }
	
	private final class DownloadThread extends Thread {
		@Override
		public void run() {
			stateTextView.setText("下载中...");
			try {
				Thread.sleep(5000);
			} catch (Exception e) {
				
			}
			stateTextView.setText("下载完成!");
		}
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<TextView android:id="@+id/stateTextView"  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    />
	<Button android:id="@+id/downBtn"  
	    android:layout_width="fill_parent" 
	    android:layout_height="wrap_content" 
	    android:text="downBtn"
	    />
</LinearLayout>

 

 为了实现UI线程和工作线程之间的通信我们需要使用Handler对象发送消息和处理消息。

package com.powerise.thread;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	private Button downBtn;
	
	private TextView stateTextView;
	
	private DownloadThread dt;
	private DownloadHandler dh = new DownloadHandler();
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        downBtn = (Button) findViewById(R.id.downBtn);
        
        stateTextView = (TextView) findViewById(R.id.stateTextView);
        
        dt = new DownloadThread();
        
        downBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				dt.start();
			}
		});
    }
	
	private final class DownloadThread extends Thread {
		@Override
		public void run() {
			dh.sendEmptyMessage(1);
			try {
				Thread.sleep(5000);
			} catch (Exception e) {
				
			}
			dh.sendEmptyMessage(-1);
		}
	}
	
	private final class DownloadHandler extends Handler {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
				case 1:
					stateTextView.setText("下载中...");
					break;
				case -1:
					stateTextView.setText("下载完成!");				
					break;
				default :
					break;
			}
		}
	}
}

 还有问题, 就是当不停的点 Button 时, 也会报错.

 

分享到:
评论

相关推荐

    Android多线程文件上传

    本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程,提高效率,并确保应用的响应性。 一、多线程基础 多线程是并发执行多个任务的能力,它允许应用程序同时处理多个任务,提高...

    Android多线程分段下载源码

    这个"Android多线程分段下载源码"实例是一个很好的学习资源,它实现了文件的分块下载,并允许用户自定义线程数来控制下载速度和效率。下面我们将详细探讨这一技术。 首先,我们要理解什么是分段下载。传统的单线程...

    android多线程demo(很清晰很详细)

    本文将深入探讨Android多线程的相关知识点,基于“android多线程demo(很清晰很详细)”的描述,我们将围绕这个示例进行讲解。 1. **线程基础**: - **主线程**:Android应用的UI线程,负责处理用户交互和更新界面。...

    android多线程下载

    通过以上步骤,我们可以实现一个功能完善的Android多线程下载器,它支持暂停、断点续传,并能够根据用户需求进行定制。在项目实践中,务必注意线程同步和数据一致性,以保证下载的正确性。 最后,提供的...

    android多线程断点下载

    总之,Android多线程断点下载是提高用户体验的重要手段,封装好的接口可以让开发者更专注于业务逻辑,而不是复杂的下载实现。通过合理地分块、线程管理和状态保存,我们可以构建一个高效、可靠的下载系统。

    Android多线程操作

    标题"Android多线程操作"和描述"Android多线程开发实例,对使用多线程的用户有一定的参考价值!"暗示我们将深入探讨Android中的线程管理以及如何在实践中有效利用。 Android系统默认运行在主线程,也被称为UI线程,...

    android多线程

    ### Android多线程详解 #### 一、进程与线程概览 在深入探讨Android多线程之前,我们首先理解进程和线程的基本概念。**进程**是正在运行的程序实例,每个进程拥有自己独立的内存空间和系统资源。而**线程**则是...

    Android多线程下载(二)

    总之,Android多线程下载涉及到了Android线程模型、并发控制、文件操作等多个方面,需要开发者有扎实的基础知识和实践经验。通过合理利用多线程,不仅可以提升应用性能,还能提高用户满意度。在实际开发中,要根据...

    android 多线程下载源代码

    在Android开发中,多线程下载是一项常见的任务,特别是在处理大文件时,为了提高下载速度和用户体验,通常会采用多线程技术。本资源提供的"android 多线程下载源代码"是一个很好的学习资料,可以帮助开发者理解并...

    Android多线程下载实现方案

    通过安装`demo.apk`,你可以直观地看到多线程下载的运行效果,同时也可以参考代码学习具体的实现方法,这对于理解和掌握Android多线程下载技术非常有帮助。 总结,Android多线程下载是提升用户体验的重要手段,通过...

    android多线程机制

    ### Android多线程机制详解 #### 一、引言 Android多线程机制是Android开发中非常重要的一部分,尤其是在处理耗时任务(如网络请求、大数据处理等)时,避免阻塞UI线程,保证应用程序的流畅性和响应性。本文将详细...

    Android多线程下载文件

    综上所述,"Android多线程下载文件"是一个涉及多方面技术的复杂任务,包括多线程编程、数据库操作、文件I/O、错误处理等。通过合理的设计和实现,我们可以创建一个高效、可靠的下载系统,为用户提供无缝的下载体验。

    Android多线程下载

    **一、Android多线程下载** 1. **多线程概念**:多线程是指在一个程序中同时运行多个线程,每个线程处理不同的任务。在下载场景下,多线程意味着将一个大文件分割成多个小部分,每个部分由一个独立的线程负责下载。...

    Android多线程全新讲解.pdf

    根据给定的文件信息,文件标题为《Android多线程全新讲解.pdf》,描述为该文档内容的同义表达,标签为“技术及资料”,以及部分内容的概述。在这些信息的基础上,我们可以生成如下知识点: 1. Java多线程基础知识:...

    android 多线程断点下载 (ListView 模式)

    通过以上步骤,我们可以构建一个功能完善的Android多线程断点下载应用,结合ListView展示下载任务,提供良好的用户交互体验。在实际开发中,还需要考虑各种边缘情况,进行充分的测试,以确保系统的稳定性和可靠性。

    Android多线程下载Demo

    本文将深入探讨Android多线程下载的原理、实现方式以及优化策略。 首先,我们要理解为什么需要多线程下载。在单线程下载中,数据流从服务器到客户端是连续的,如果网络状况不佳或者文件体积过大,下载速度可能会...

    android 多线程下载demo

    这个"android多线程下载demo"展示了如何利用多线程分段下载一个APK文件,同时实现实时更新UI展示下载进度,并在下载完成后自动跳转到应用安装界面。以下是对这个Demo涉及知识点的详细解释: 1. **多线程下载**:多...

    Android多线程断点下载(优化)

    在本文中,我们将深入探讨Android多线程断点下载的原理、实现方式以及优化策略。 首先,了解多线程的基本概念是必要的。在单线程下载中,数据流通常是顺序的,如果网络状况不佳,整个下载过程将受到影响。而多线程...

    Android 多线程图片下载开源代码

    1. Android多线程编程:线程池、AsyncTask、Handler/Looper、IntentService 2. 网络请求:HttpURLConnection、OkHttp 3. 图片处理与优化:Bitmap、LruCache、Fresco、Glide 4. 异步编程模型:Callback、LiveData、...

    android多线程后台下载

    android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序,android多线程后台下载示例程序

Global site tag (gtag.js) - Google Analytics