因为一次偶然的机会让我对移动开发产生了浓厚的兴趣,于是就把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>
相关推荐
因此,"Android异步操作数据库"是一个至关重要的知识点,它涉及到如何在后台线程中安全、高效地处理数据库事务,避免阻塞UI。 1. **AsyncTask** Android提供了一个内置的异步任务类`AsyncTask`,适用于短时间的...
**Android异步操作的重要性** 在Android系统中,主线程负责处理UI更新和用户交互,如果在此线程执行耗时操作,会导致应用无响应(ANR:Application Not Responding),严重影响用户体验。因此,开发者需要将网络请求...
Android异步操作----AsyncTask类
在Android开发中,异步操作是至关重要的,它允许我们执行耗时的操作,如网络请求、数据库查询或大型计算,而不会阻塞用户界面。异步任务的主要目标是避免主线程(UI线程)被长时间占用,从而提高应用的响应性和用户...
在Android开发中,异步操作是非常重要的一部分,它允许开发者在后台执行耗时任务,而不会阻塞主线程,从而避免出现"应用无响应"(ANR)错误。本实例聚焦于`AsyncTask`,它是Android提供的一种轻量级异步处理机制,特别...
在Android开发中,异步操作是至关重要的,它能让应用程序在执行耗时任务时保持界面...这个"AysncTest"例子可能就是一个演示这些异步处理技术的简单应用,通过分析和学习,开发者可以更好地掌握Android异步编程的精髓。
以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap> 其中包含三个异步操作类可供测试
LoaderCursorUtil 异步查询数据库的工具类 使用方法如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LoaderCursorUtil cursorUtil = new LoaderCursorUtil...
在这个"Android异步加载图片例子"中,我们将探讨如何在Android应用中实现这一功能。 首先,我们需要理解Android的主线程(UI线程)与工作线程的区别。主线程负责处理用户界面交互,而工作线程则用于执行耗时操作,...
params)在后台线程执行,进行实际的异步操作;onPostExecute(Result result)同样在UI线程中执行,用于处理任务完成后更新UI的操作。 为了实现异步加载文字,我们可以创建一个继承自AsyncTask的类,例如...
理解并熟练使用Android中的线程和异步操作是提高应用性能和用户体验的关键。在设计应用时,应该根据任务类型和需求选择合适的异步处理方式,以实现高效的多线程编程。在实际项目中,可以结合使用多种机制,例如,...
总之,"android 异步显示View"这个话题涵盖了Android异步编程的多种技术和最佳实践,包括AsyncTask、Handler/Looper、Loader、Adapter/ViewHolder优化、Paging Library以及第三方库的使用,都是为了在保证用户体验的...
"Android异步请求网络图片demo"是一个示例项目,旨在演示如何在Android应用中有效地、非阻塞地下载并显示网络上的图片。这个项目的核心知识点主要包括以下几个方面: 1. **AsyncTask**: Android提供了`AsyncTask`类...
本文将深入探讨“android异步任务框架源码”,讲解其核心概念、工作原理以及如何实现。 Android中的异步任务通常通过AsyncTask类来实现。AsyncTask是一个轻量级的组件,设计用于在UI线程和后台线程之间进行通信。它...
本教程将深入探讨如何利用异步操作来实现从服务器通过HTTP协议下载并显示图片。 一、异步编程基础 异步编程是Android中处理网络请求的关键,它可以防止应用程序因执行长时间运行的任务而阻塞主线程,从而避免出现...
"Android异步加载图片"是一个常见的需求,它涉及到用户体验优化、内存管理以及线程安全等多个方面。这里我们将深入探讨这个主题,并结合提供的"ImageLoader-develop"可能是一个图片加载库的源码,来讲解相关的知识点...
"Android异步封装调用Webservice"是指将调用Web服务的过程进行封装,使其能够在后台线程执行,避免阻塞主线程,提升用户体验。C# Webservice是一种基于.NET框架的服务,可以通过SOAP协议与其他平台(如Android)进行...
Asynctask是Android为开发者提供的一个轻量级的异步任务框架,特别适合处理短时间的后台操作,然后更新UI。它的生命周期包括onPreExecute()用于在执行前做一些准备工作,doInBackground()执行后台任务,...