`
ronaldoLY
  • 浏览: 44004 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

android线程及异步操作

 
阅读更多

         最近在看《Android Wireless Application Development Volume2》第一章,讲的主要是线程及异步操作,android中的主要UI线程,最好不要包括太耗时的操作,否则会让该线程阻塞,所以我们就需要将这些耗时的操作放在其他地方执行,而又与主要UI线程有一定关联。androidSDK提供了几种将操作从主UI线程移除的方法,这里主要介绍两种:1.使用AsyncTask类;2.使用标准Thread类。

          现在完成一个计数任务,从1计到100,在TextView中显示进度。如果把这些循环加的操作放在onCreat()方法中,肯定会出现阻塞。利用AsyncTask类在后台进行操作,可以使主UI线程顺畅进行下去。这个类里主要涉及到3个方法,doInBackground(),onProgressUpdate(),onPostExecute(),这3个方法中的参数又和类中的3个变量有直接关系,AsyncTask<Void, Integer, Integer>.

      doInBackground()就是在后台运行;onProgressUpdate()是在数据更新时调用,onPostExecute()是完成时调用

 

package com.example.chapter1;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //实例化该任务,调用方法启动
        CountingTask task=new CountingTask();
        task.execute();
    }

    
    
    
    private class CountingTask extends AsyncTask<Void, Integer, Integer>{

    	CountingTask(){}
    	
		@Override
		/**
		 * 在后台运行并处理后台操作
		 */
		protected Integer doInBackground(Void... params) {
			// TODO Auto-generated method stub
			
			int i=0;
			while(i<100){
				SystemClock.sleep(250);
				i++;
				if(i%5==0){
					//每5%进度时更新一次UI
					publishProgress(i);
				}
			}
			return i;
		}
		/**
		 * 将后台操作与主UI线程联系起来的方法,数据更新时调用
		 * @param progress  完成度
		 */
		protected void onProgressUpdate(Integer... progress){
			TextView tv=(TextView)findViewById(R.id.tv1);
			tv.setText(progress[0]+"% 已完成");
		}
		/**
		 * 将后台操作与主UI线程联系起来的方法,完成时调用
		 * @param result  结果
		 */
		protected void onPostExecute(Integer result){
			TextView tv=(TextView)findViewById(R.id.tv1);
			tv.setText("计数完成"+"计到了"+result.toString());
		}
    	
    }
}

 

 效果就是上面这样。

 

 

 

2.用Thread的方法,这个是传统的方法,代码如下:

 new Thread(new Runnable() {
            public void run() {

                int i = 0;

                while (i < 100) {
                    SystemClock.sleep(250);
                    i++;

                    final int curCount = i;
                    if (curCount % 5 == 0) {
                        //每过5%就更新UI
                        tv.post(new Runnable() {
                            public void run() {
                                tv.setText(curCount + "%完成");
                            }
                        });
                    }
                }
                
                tv.post(new Runnable() {
                    public void run() {
                        tv.setText("全部完成!");
                    }
                });
            }

        }).start();

 

  • 大小: 39.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android多线程及异步处理问题详细探讨

    在Android开发中,多线程和异步处理是至关重要的技术,它们主要用于改善用户体验,避免因为长时间阻塞主线程导致的界面无响应(ANR)。本文将深入探讨为什么需要多线程,如何实现多线程,以及多线程的核心机制。 1....

    android多线程的异步断点续传示例demo

    总结来说,Android中的多线程异步断点续传技术涉及了文件操作、网络请求、线程同步等多个方面,理解并掌握这些知识对于提升应用性能和用户体验至关重要。通过上述示例和解释,开发者可以更好地理解和实现这一功能。

    android thread 异步操作

    Android线程 #### 1.1 主线程 主线程是应用启动时自动创建的,主要负责处理与用户交互相关的事件,如触摸事件、界面绘制等。如果在主线程中执行耗时操作,会导致应用程序无响应(ANR),用户体验极差。 #### 1.2 ...

    android 异步操作

    在Android开发中,异步操作是至关重要的,它允许我们执行耗时的操作,如网络请求、数据库查询或大型计算,而不会阻塞用户界面。异步任务的主要目标是避免主线程(UI线程)被长时间占用,从而提高应用的响应性和用户...

    Android 多线程 异步加载网络图片 ThreadTest

    2. 采用handler+Thread模式实现多线程异步加载; 3. 引入线程池来管理多线程 4. 引入线程池,并引入内存缓存功能,并对外部调用封装了接口,简化调用过程 参考:...

    android多线程异步下载图片

    在Android开发中,多线程异步下载图片是一项常见的需求,尤其在开发涉及大量图片展示的应用时,如社交应用、电商应用等。这样的技术能够提高用户体验,避免UI卡顿,因为图片加载工作不会阻塞主线程。下面我们将深入...

    Android异步操作数据库

    因此,"Android异步操作数据库"是一个至关重要的知识点,它涉及到如何在后台线程中安全、高效地处理数据库事务,避免阻塞UI。 1. **AsyncTask** Android提供了一个内置的异步任务类`AsyncTask`,适用于短时间的...

    android demo,Runnable异步线程的处理

    在Android开发中,异步线程的处理是至关重要的,特别是在UI交互中,为了保证用户界面的流畅性,我们通常需要将耗时操作放在后台线程执行,这就是Runnable异步线程的应用场景。本Android演示项目("android demo")...

    Android多线程及异步任务消息处理机制 一 Handler的使用

    在Android开发中,多线程和异步任务处理机制是至关重要的,特别是在处理耗时操作如网络请求、数据库操作或大型数据计算时。本篇博文将聚焦于Android中的`Handler`机制,它是Android异步消息处理的核心组件。通过`...

    Android线程异步Demo代码

    下面将详细解释`Android线程异步Demo代码`中的关键知识点。 1. **AsyncTask**:AsyncTask是一个轻量级的异步任务框架,用于在后台线程执行任务并在UI线程更新结果。它包含三个泛型参数,分别是`Params`(输入参数)...

    android自动更新异步线程和NOTIFICATION的方式

    因此,我们需要在后台线程即异步线程中执行这些操作。Android提供了多种方式来创建异步线程,如AsyncTask、Handler/Looper、IntentService以及使用Java的Executor框架。 1. **AsyncTask**:AsyncTask是一个轻量级的...

    android asynTask 异步后台线程 各种操作

    在Android开发中,异步处理是非常重要的一环,特别是在UI线程中执行耗时操作时。`AsyncTask`是Android提供的一种轻量级的异步处理机制,它可以帮助开发者在后台线程执行任务,然后在主线程更新UI,避免了因长时间...

    Android异步线程下载图片

    在Android开发中,异步处理是一项至关重要的技术,特别是在处理耗时操作如网络请求和大文件下载时。本文将深入探讨如何使用`AsyncTask`、`New Thread`以及`Handler`来实现Android应用中的异步图片下载。 首先,让...

    android 异步任务 Binder 线程间交互 Handler 迭代器模式

    AsyncTask是Android提供的一种轻量级的异步处理机制,主要用于在后台线程执行耗时操作,然后在主线程更新UI。它包含三个泛型参数,分别代表输入参数类型、进度类型和结果类型。AsyncTask提供了onPreExecute、...

    android sqlite多线程和异步加载数据库数据示例

    在这个示例中,我们将探讨如何在Android中进行多线程数据库操作以及如何利用CursorAdapter实现异步加载数据库数据。 首先,我们来看多线程访问SQLite数据库。在Android中,主线程负责UI的更新和交互,而长时间运行...

    Android异步线程使用Demo

    在Android应用开发中,由于主线程负责用户界面的更新,执行耗时操作(如网络请求、数据库操作等)会阻塞UI,导致应用无响应,因此需要使用异步线程来处理这些任务。本示例"Android异步线程使用Demo"主要探讨的是...

    Android线程结束——合理的结束你想结束的线程

    总结,结束Android线程时,关键在于优雅、安全地中断操作,而不是简单粗暴地停止。合理的线程管理可以提升用户体验,避免ANR,并保持应用程序的稳定运行。正确使用Thread、AsyncTask、Handler和Looper等工具,结合...

    Android多线程异步加载图片并更新视图

    本文将详细探讨如何在Android中实现多线程异步加载图片并更新视图。 首先,我们需要了解Android的线程模型。主线程,也被称为UI线程,负责处理所有的用户交互和更新视图的操作。为了在后台执行耗时任务,我们可以...

    Android多线程操作

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

    android 异步操作框架

    在Android开发中,异步操作是必不可少的一部分,它能让应用程序在后台执行耗时任务,而不会阻塞用户界面,提供更好的用户体验。Android提供了多种异步处理框架,其中一个被广泛使用的开源框架是“android-async-http...

Global site tag (gtag.js) - Google Analytics