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平臺編譯的。固然也徹底能夠在其餘的平臺上編譯。

相關文章
相關標籤/搜索