91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android中AsyncTask類的示例分析

發布時間:2021-07-15 11:20:57 來源:億速云 閱讀:166 作者:小新 欄目:移動開發

這篇文章將為大家詳細講解有關android中AsyncTask類的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

AsyncTask也叫做“異步任務”,是一個抽象類

   AsyncTask約定了在子線程中執行任務的抽象方法,開發者可以在自定義AsyncTask的實現類中重寫該方法,

   則AsyncTask在工作時會自動開啟子線程執行相關代碼

AsyncTask類的聲明:

   public abstract class AsyncTask<Param,Progress,Result>

        Param 執行異步任務后,需要參數的數據類型

                 Progress 執行異步任務過程中,標識進度的數據類型

Result 執行異步任務后,需要返回的結果的數據類型

AsyncTask中的抽象方法: public abstract Result doInBackground(params... params)

讓AsyncTask開始工作:

   public final AsyncTask<params,Progress,Result> execute(params...params)

    該方法被調用后,會自動開啟子線程并調用dnInBackground()方法,該方法必須在UI線程中調用

            案例:

    布局:

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="104dp" 
    android:onClick="doAsyncTask" 
    android:text="開始" />

MainActivity:

 public class MainActivity extends Activity { 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    System.out.println("onCreate" + Thread.currentThread().getId()); 
  } 
  public void doAsyncTask(View view){ 
    new InnerAsyncTask().execute(""); 
  } 
  private class InnerAsyncTask extends AsyncTask<Object, Object, Object>{ 
    @Override 
    protected Object doInBackground(Object... params) { 
      for(int i = 0; i < 30;i++){ 
        System.out.println("InnerAsyncTask" + Thread.currentThread().getId()); 
        try { 
          Thread.sleep(1000); 
        } catch (InterruptedException e) { 
          e.printStackTrace(); 
        } 
      } 
      return null; 
    } 
  } 
}

AsyncTask更新UI

AsyncTask約定了任務執行完畢后的回調方法,該方法并不是抽象的,開發者可以選擇性的實現。

protected void onPostExecute(Result result)

該方法是運行在主線程的方法

實例:

布局:

<Button 
   android:id="@+id/button1" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:layout_alignParentTop="true" 
   android:layout_centerHorizontal="true" 
   android:layout_marginTop="104dp" 
   android:onClick="doAsyncTask" 
   android:text="開始" /> 
 
 <ImageView 
   android:id="@+id/imageView1" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:layout_below="@+id/button1" 
   android:layout_centerHorizontal="true" 
   android:layout_marginTop="22dp" 
   android:src="@drawable/abs" />

MainActivity:

 public class MainActivity extends Activity { 
  private ImageView image; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
     image = (ImageView) findViewById(R.id.imageView1);  
//   System.out.println("onCreate" + Thread.currentThread().getId()); 
  } 
  public void doAsyncTask(View view){ 
    new InnerAsyncTask().execute(""); 
  } 
  private class InnerAsyncTask extends AsyncTask<String,Integer, Bitmap>{ 
    @Override 
    protected Bitmap doInBackground(String... params) { 
      try { 
        Thread.sleep(3000); 
      } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
      return BitmapFactory.decodeResource(getResources(), R.drawable.abc); 
    } 
     @Override 
    protected void onPostExecute(Bitmap result) { 
      image.setImageBitmap(result);     
    } 
  } 
}

 AsyncTask更新進度

         AsyncTask約定了任務執行過程中,更新進度的回調方法,該方法并不是抽象的,開發者可以選擇性地實現。

protected void onProgressUpdate(Progress... values)(該方法運行在主線程)

在任務執行過程中,可以調用publishProgress()方法提交進度,使得onProgressUpdate()方法被回調

    實例

        布局:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" > 
  <TextView  
    android:id="@+id/tv_pb" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="100%" 
    android:visibility="gone" 
    android:textSize="16sp"/> 
 
  <Button 
    android:id="@+id/btn_update" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="104dp" 
    android:onClick="doAsyncTask" 
    android:text="開始" /> 
 
  <ImageView 
    android:id="@+id/iv_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/btn_update" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="22dp" 
    android:src="@drawable/abs" /> 
 
  <ProgressBar 
    android:id="@+id/pb_progress" 
     
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:max="100" 
    android:visibility="gone" 
    android:layout_alignRight="@+id/btn_update" 
    android:layout_marginTop="32dp" /> 
  
</RelativeLayout>

LoadImage:

public class LoadImage extends AsyncTask<String, Integer, Object> { 
  private Context context; 
  private ImageView imageview; 
  private Bitmap image; 
  private Button button; 
  private ProgressBar pg; 
  private TextView tv; 
  public LoadImage(Context context, Button button, ImageView imageview, 
      ProgressBar pg, TextView tv) { 
    this.context = context; 
    this.imageview = imageview; 
    this.button = button; 
    this.pg = pg; 
    this.tv = tv; 
  } 
  @Override 
  protected Object doInBackground(String... params) { 
    for (int i = 0; i <= 100; i++) { 
      publishProgress(i); 
    try { 
      Thread.sleep(50); 
    } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
    } 
    image = BitmapFactory.decodeResource(context.getResources(), 
        R.drawable.abc); 
    return null; 
  } 
  @Override 
  protected void onProgressUpdate(Integer... values) { 
    // TODO Auto-generated method stub 
    pg.setProgress(values[0]); 
    tv.setText(values[0] + "%"); 
  } 
  @Override 
  protected void onPostExecute(Object result) { 
    imageview.setImageBitmap(image); 
    button.setEnabled(true); 
    pg.setVisibility(View.GONE); 
    tv.setVisibility(View.GONE); 
  } 
}

MainActivity:

 public class MainActivity extends Activity { 
  private ImageView image; 
  private Button button; 
  private ProgressBar pg; 
  private TextView tv;  
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
     image = (ImageView) findViewById(R.id.iv_image);   
     button = (Button) findViewById(R.id.btn_update); 
     pg = (ProgressBar) findViewById(R.id.pb_progress); 
     tv = (TextView) findViewById(R.id.tv_pb); 
  } 
  public void doAsyncTask(View view){ 
    button.setEnabled(false); 
    pg.setVisibility(View.VISIBLE); 
    tv.setVisibility(View.VISIBLE); 
    new LoadImage(this,button,image,pg,tv).execute(""); 
  } 
}

AsyncTask是一個綜合了任務的執行、進度更新、結果提交的類,使用AsyncTask

可以集中的編寫某個異步任務的全部代碼,而不必關心線程間的通信問題,降低了

編碼出錯幾率,并有效的提高了代碼的可閱讀性、可維護性等。

小案例之異步加載圖片

使用到的技術: Canvas(畫布)、Paint(畫筆)

Canvas(畫布):用來決定畫布的基礎屬性,執行繪制

Paint(畫筆):設置顏色、設置字體、其他的設置

同一次繪圖過程中,可能需要多個畫筆對象,或多次調整畫筆的屬性

使用Canvas:

public Canvas()
public Canvas(Bitmap bitmap)
public void drawRect(float left,float top,float right,float bottom,Paint paint)
public void drawBitmap(Bitmap bitmap,float left,float top,Paint paint)
public void drawText(String text,float x,float y,Paint paint)

使用Paint:

public Paint()
public native void setColr(int color)
public native void setAntiAlias(boolean aa)
public native void setTextSize(float textSize)
public void setTextAlign(Align align)
public Xfermode setXfermode(Xfermode xfermode)

關于“android中AsyncTask類的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枞阳县| 东明县| 泾源县| 新乡县| 舟山市| 噶尔县| 武陟县| 分宜县| 奉贤区| 靖江市| 丰镇市| 凤城市| 嘉黎县| 陵水| 无极县| 波密县| 七台河市| 岳阳市| 雅江县| 巴林左旗| 祁东县| 乌兰浩特市| 禹城市| 临西县| 黎川县| 邢台县| 哈密市| 龙里县| 安泽县| 陇川县| 芜湖县| 上栗县| 临沂市| 天气| 嘉鱼县| 巨鹿县| 南华县| 沅陵县| 鄂伦春自治旗| 海林市| 内江市|