因为一次偶然的机会让我对移动开发产生了浓厚的兴趣,于是就把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中的控件进行操作 * 执行一些耗时较长的方法 */@Overrideprotected String doInBackground(Integer... params) {// TODO Auto-generated method stubNetOperator operator = new NetOperator();int i = 0;for (i = 10; i < 100; i += 10) {operator.operator();publishProgress(i);}return i + "";}/** * 该方法运行在UI线程中实现对UI线程中的控件的一些操作 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stub        // 设置控件可见textView.setVisibility(View.VISIBLE);progressBar.setVisibility(View.VISIBLE);textView.setText("开始进行异步操作");}/** * 该方法运行在UI线程中实现对UI线程中的控件的一些操作 */@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubtextView.setText("异步操作结束" + result);progressBar.setVisibility(View.GONE);}/** * 1、该方法运行在UI线程中实现对UI线程中的控件的一些操作 * 2、在doInBackground方法中每次调用publishProgress都会触发这个方法的执行 */@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubprogressBar.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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubProgressBarAsyncTask 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 blocke.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. Android 解决65535的限制 使用android-support-multidex解决Dex
  2. (五)Android线程及其消息机制
  3. Android 应用语言切换的三种方法
  4. Android CheckBox中设置padding无效问题解决方法
  5. IKNinePhotoView 是一个开源的 Android 九宫格控件,可以自适应宽
  6. Android设备Root检测方法
  7. Android之——自定义复合控件的实现
  8. Android Studio中创建Selector文件的方法

随机推荐

  1. Android(安卓)组件化在公用Module里实现
  2. android 源码编译导入library project
  3. android studio一键生成快速开发实现语言
  4. Android(安卓)Studio 从2.3.1升级到3.4.1
  5. Android(安卓)如何快速定位当前页面是哪
  6. Android仿淘宝头条滚动广告条
  7. Android8.0、Android9.0 通知notificatio
  8. android 开机铃音和开机图片以及系统自带
  9. android 对dp单位的理解
  10. android之AsyncQueryHandler详解