因为一次偶然的机会让我对移动开发产生了浓厚的兴趣,于是就把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异步操作数据库
android 异步操作框架 优秀的开源异步框架
Android异步操作----AsyncTask类
android异步操作例子 很容易理解的小例子
这是一个关于异步操作,讲解onPreExecute,doInBackground等方法
AsyncTask实例,简单的实例,让你对异步UI刷新一目了然,不是网络上前篇一律的网络资源加载的实例哦!你懂的!
以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap> 其中包含三个异步操作类可供测试
LoaderCursorUtil 异步查询数据库的工具类 使用方法如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LoaderCursorUtil cursorUtil = new LoaderCursorUtil...
Android中异步更新UI的资源,通过Thread,AsyncTask去更新界面的UI,让用户的体验更棒
Android 异步加载图片,对ListView的异步加载图片的功能演示,主要根据url读取图片返回流的方法。为了方便演示,将请求图片的链接先固定,每读取好一个图片就更新,界面比较简单,当然你可以做成比较好的,像很多好...
这时候我们就不能直接在UI线程中(主线程)中去完成这些“耗时操作”,因为,UI线程主要是用来更新界面UI,如果一次进行太多的任务处理,并且这些任务需要相当的时间来完成,就会造成UI线程堵塞,结果可能是应用无响应...
android asynTask 异步后台线程 各种操作 经典完整 非常经典 非常完整的代码。
Android_数据库_异步操作封装 , http://blog.csdn.net/zimo2013/article/details/39993373
DbFlow框架是目录比较好用的数据库操作框架之一,查询速度很快,使用也简单,技术异步同步查询,大家可以学习一下
Android中的异步操作,适用于Android客户端和服务端进行数据交互时,基于网络的原因,基于用户体验良好的角度考虑。
在android中界面要实时刷新数据,利用异步线程执行耗时操作,把执行后数据传给UI线程处理
Android的LazyLoad主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,我们简单回顾下Android...
Android系统中通过VCard格式异步进行备份与恢复操作的demo
通过异步获取手机已安装apk信息demo,整理测试正常运行