AsyncTask(1)一个使用AsyncTask实现简单异步刷新的功能。

                      一个使用AsyncTask实现简单异步刷新的功能。

      实现该功能的过程,前提是您能在eclipse下创建简单android项目。若是您未作过任何的android开发就可能看起来比较吃力了。下面我将开发的代码分块粘贴出来,以供你们参考: java

       1.整个项目的架构 android

         这个应该很清楚了,就很少说什么了。 架构

       

      2.MainActivity.java 的内容 app

       

 

package com.android_test; eclipse

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast; 异步

/**
 * 一个使用AsyncTask实现简单异步刷新的功能。
 *  功能介绍:用一个按钮触发事件,用TextView来显示textview值的变化
 * @author acebing
 *
 */
public class MainActivity extends Activity {
 private TextView mTextView; // 用来显示变化的值
 private Button mButton; // 事件触发按钮
 // private ProgressBar mProgressBar;
    private GetCSDNLogoTask task;
 @Override
 public void onCreate(Bundle savedInstanceState) { ide

  super.onCreate(savedInstanceState); ui

  setContentView(R.layout.activity_main);
  mTextView = (TextView) findViewById(R.id.textview);
  mButton = (Button) findViewById(R.id.button);
  mButton.setText("开始");
  // mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
  mButton.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    task = new GetCSDNLogoTask();
    // 触发异步事件,并初始化参数为0
    task.execute(0);
   }
  });
 }
 /**
  * 此方法是在按回退键的时候中止后台任务
  */
 @Override
 protected void onDestroy() {
  // TODO Auto-generated method stub
  super.onDestroy();
  task.cancel(true);
 } this

 /**
  * 继承AsyncTask 三种泛型类型 Params,Progress和Result。
  * Params :启动任务是的输入参数
  * Progress:任务运行的进度值
  * Result: 任务运行结束要返回的参数
  *
  *
  * 运行改程序能够经过LOG日志查看该类中三个方法被调用的次数和顺序
  */
 class GetCSDNLogoTask extends AsyncTask<Integer, Integer, Integer> {
        /**
         *该方法 处理后台执行的任务,在后台线程执行。
         *该方法处理一些耗时的操做,在该方法中不能进行UI组建的更新
         */
  @Override
  protected Integer doInBackground(Integer... params) {
   Log.d("syso", "doInBackground");
   publishProgress(0); // 将会调用onProgressUpdate(Integer... progress)方法
   do {
    try {
     Thread.sleep(1000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    // 判断若是task已经cancel就没有必须继续进行下面的操做 
    params[0] += 10;
    publishProgress(params[0]);
   } while (params[0] < 100);
   return params[0];
  }
      /**
       * 在调用publishProgress以后被调用,在ui线程执行.
       * publishProgress 触发一次,则该方法被调用一次。
       * 在此方法中能够进行UI组件的更新。
       * 例如给textview组件设置值等
       */
  protected void onProgressUpdate(Integer... progress) {
   Log.d("syso", "onProgressUpdate");
   // mProgressBar.setProgress(progress[0]);// 更新进度条的进度
   mTextView.setText(progress[0].toString());
   Log.d("syso", progress[0].toString()); .net

  }
        /**
         * 该方法是后台任务执行完以后被调用,在ui线程执行
         * 能够进行UI组件更新,
         * 而且该组件只返回最后一次结果,一次任务也只调用一次
         */
  protected void onPostExecute(Integer result) {
   Log.d("syso", "onPostExecute");
   if (result != null) {
    Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_LONG)
      .show();
   } else {
    Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_LONG)
      .show();
   }
  }
  /**
   *若是activity实现了 onDestroy方法,在按回退键后此方法执行,并任务中止。
   *若是没有实现onDestroy方法,在按回退键后此方法不执行而且后台任务继续直到任务自动结束。
   */
  @Override
  protected void onCancelled() {
   // TODO Auto-generated method stub
   super.onCancelled();
   Log.d("syso", "task 取消");
  }
 }
}

   3 .activity_main.xml  配置

下面配置中<!--     <ProgressBar  -->
<!--         android:id="@+id/progressBar" -->
<!--         android:layout_width="wrap_content" -->
<!--         android:layout_height="wrap_content" -->
<!--         android:visibility="gone" -->
<!--    /> -->
   上边这一段配置是注释掉的,不起做用的,能够删除

     <?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
  
    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
<!--     <ProgressBar  -->
<!--         android:id="@+id/progressBar" -->
<!--         android:layout_width="wrap_content" -->
<!--         android:layout_height="wrap_content" -->
<!--         android:visibility="gone" -->
<!--    /> -->
</LinearLayout>

          4.AndroidManifest.xml 配置

         

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android_test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="15" />

<!-- 下面这一行是上网权限的配置,在这个程序中能够省去 -->
<uses-permission android:name="android.permission.INTERNET" />
   
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  5 。效果(界面有点搓,你们见谅)

          部署好项目后启动,看到启动后的效果是一个开始按钮,点击开始按钮能够显示一个textview上值从0,步长为10每隔1秒的递增,直到100,而后弹出成功的提示。

 6.源码地址:http://www.oschina.net/code/snippet_867782_15488

      全部配置及代码都已贴完,以上小项目是使用android4.0.3平台编译的。固然也彻底能够在其余的平台上编译。

相关文章
相关标签/搜索