`
空城旧梦why
  • 浏览: 25367 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

android异步操作

 
阅读更多

        因为一次偶然的机会让我对移动开发产生了浓厚的兴趣,于是就把mars老师的四季的视频全都下载了下来开始自学android,之前看视频自学一直也没写过博客,现在也看到了第四季就想写一写博客分享一下我的学习经历。

        1、要实现异步操作就要用到android提供一个AsyncTask类,这个类是一个泛型。下面附上我的代码,我直接在代码中说明

package com.example.async2;

import android.os.AsyncTask;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;

/**
 * 1、继承AsyncTask<E1, E2, E3>,其中E1,E2,E3分别是三个类型
 * 2、必须要重写的方法是doInBackground方法
 * 3、第一个类型对应doInBackground方法的参数类型
 * 4、第二个类型对应于onProgressUpdate方法的参数类型
 * 5、第三个对应于onPostExecute方法的参数类型
 * 6、在生成该类的对象来实现异步操作的时候要调用execute方法
 * 7、调用该方法之后首先执行的是onPreExecute方法,然后执行doInBackground方法,最后执行onPostExecute方法
 * 
 * @author why
 * 
 */
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {

	// UI线程中的文本框控件
	private TextView textView = null;
	// UI线程中的进度条控件
	private ProgressBar progressBar = null;

	public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {
		this.textView = textView;
		this.progressBar = progressBar;
	}

	/**
	 * 改方法不运行在UI线程之中,所以在该方法中不能对UI中的控件进行操作
	 * 执行一些耗时较长的方法
	 */
	@Override
	protected String doInBackground(Integer... params) {
		// TODO Auto-generated method stub
		NetOperator operator = new NetOperator();
		int i = 0;
		for (i = 10; i < 100; i += 10) {
			operator.operator();
			publishProgress(i);
		}
		return i + "";
	}

	/**
	 * 该方法运行在UI线程中实现对UI线程中的控件的一些操作
	 */
	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
        // 设置控件可见
		textView.setVisibility(View.VISIBLE);
		progressBar.setVisibility(View.VISIBLE);
		textView.setText("开始进行异步操作");
	}

	/**
	 * 该方法运行在UI线程中实现对UI线程中的控件的一些操作
	 */
	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub
		textView.setText("异步操作结束" + result);
		progressBar.setVisibility(View.GONE);
	}

	/**
	 * 1、该方法运行在UI线程中实现对UI线程中的控件的一些操作
	 * 2、在doInBackground方法中每次调用publishProgress都会触发这个方法的执行
	 */
	@Override
	protected void onProgressUpdate(Integer... values) {
		// TODO Auto-generated method stub
		progressBar.setProgress(values[0]);
	}

}

         2、主界面Activity

package com.example.async2;

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

/**
 * 主界面,有TextView,ProgressBar和Button三个控件
 * @author why
 *
 */
public class MainActivity extends Activity {

	private TextView textView = null;
	private ProgressBar progressBar = null;
	private Button button = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		// 设置布局文件
		setContentView(R.layout.acttivity_main);

		// 通过ID获取控件
		textView = (TextView) findViewById(R.id.textView);
		progressBar = (ProgressBar) findViewById(R.id.progressbar);
		button = (Button) findViewById(R.id.button1);

		// 给button绑定监听器
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				ProgressBarAsyncTask task = new ProgressBarAsyncTask(textView, progressBar);
				task.execute(1000);
			}
		});
	}

}

         3、NetOperator模拟执行时间较长的一些操作

package com.example.async2;

/**
 *
 * @author why
 *
 */
public class NetOperator {

	public void operator() {
		try {
			// 将当前线程休眠,模拟执行时间较长的操作
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

         4、布局文件,很简单只有三个控件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone" />

    <ProgressBar
        android:id="@+id/progressbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:visibility="gone" />

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button1" />

</LinearLayout>

 

1
0
分享到:
评论

相关推荐

    Android异步操作数据库

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

    android 异步操作框架

    **Android异步操作的重要性** 在Android系统中,主线程负责处理UI更新和用户交互,如果在此线程执行耗时操作,会导致应用无响应(ANR:Application Not Responding),严重影响用户体验。因此,开发者需要将网络请求...

    Android异步操作

    Android异步操作----AsyncTask类

    android 异步操作

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

    android异步操作实例

    在Android开发中,异步操作是非常重要的一部分,它允许开发者在后台执行耗时任务,而不会阻塞主线程,从而避免出现"应用无响应"(ANR)错误。本实例聚焦于`AsyncTask`,它是Android提供的一种轻量级异步处理机制,特别...

    android异步操作例子

    在Android开发中,异步操作是至关重要的,它能让应用程序在执行耗时任务时保持界面...这个"AysncTest"例子可能就是一个演示这些异步处理技术的简单应用,通过分析和学习,开发者可以更好地掌握Android异步编程的精髓。

    Android异步操作实例源码----AsyncTask类

    以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap&gt; 其中包含三个异步操作类可供测试

    Android异步查询数据库工具类LoaderCursor

    LoaderCursorUtil 异步查询数据库的工具类 使用方法如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LoaderCursorUtil cursorUtil = new LoaderCursorUtil...

    Android异步加载图片例子

    在这个"Android异步加载图片例子"中,我们将探讨如何在Android应用中实现这一功能。 首先,我们需要理解Android的主线程(UI线程)与工作线程的区别。主线程负责处理用户界面交互,而工作线程则用于执行耗时操作,...

    Android异步加载文字

    params)在后台线程执行,进行实际的异步操作;onPostExecute(Result result)同样在UI线程中执行,用于处理任务完成后更新UI的操作。 为了实现异步加载文字,我们可以创建一个继承自AsyncTask的类,例如...

    android thread 异步操作

    理解并熟练使用Android中的线程和异步操作是提高应用性能和用户体验的关键。在设计应用时,应该根据任务类型和需求选择合适的异步处理方式,以实现高效的多线程编程。在实际项目中,可以结合使用多种机制,例如,...

    android 异步显示View

    总之,"android 异步显示View"这个话题涵盖了Android异步编程的多种技术和最佳实践,包括AsyncTask、Handler/Looper、Loader、Adapter/ViewHolder优化、Paging Library以及第三方库的使用,都是为了在保证用户体验的...

    Android异步请求网络图片demo

    "Android异步请求网络图片demo"是一个示例项目,旨在演示如何在Android应用中有效地、非阻塞地下载并显示网络上的图片。这个项目的核心知识点主要包括以下几个方面: 1. **AsyncTask**: Android提供了`AsyncTask`类...

    android异步任务框架源码

    本文将深入探讨“android异步任务框架源码”,讲解其核心概念、工作原理以及如何实现。 Android中的异步任务通常通过AsyncTask类来实现。AsyncTask是一个轻量级的组件,设计用于在UI线程和后台线程之间进行通信。它...

    android异步下载图片

    本教程将深入探讨如何利用异步操作来实现从服务器通过HTTP协议下载并显示图片。 一、异步编程基础 异步编程是Android中处理网络请求的关键,它可以防止应用程序因执行长时间运行的任务而阻塞主线程,从而避免出现...

    android异步加载图片

    "Android异步加载图片"是一个常见的需求,它涉及到用户体验优化、内存管理以及线程安全等多个方面。这里我们将深入探讨这个主题,并结合提供的"ImageLoader-develop"可能是一个图片加载库的源码,来讲解相关的知识点...

    android 异步封装调用Webservice

    "Android异步封装调用Webservice"是指将调用Web服务的过程进行封装,使其能够在后台线程执行,避免阻塞主线程,提升用户体验。C# Webservice是一种基于.NET框架的服务,可以通过SOAP协议与其他平台(如Android)进行...

    Android异步刷新UI多种实现方案

    Asynctask是Android为开发者提供的一个轻量级的异步任务框架,特别适合处理短时间的后台操作,然后更新UI。它的生命周期包括onPreExecute()用于在执行前做一些准备工作,doInBackground()执行后台任务,...

Global site tag (gtag.js) - Google Analytics