1. 程式人生 > >Android學習---使用非同步內部類實現進度條載入效果

Android學習---使用非同步內部類實現進度條載入效果

Android學習—使用非同步內部類

為什麼要用AsyncTask?

答:我們可以用上述兩種方法來完成我們的非同步操作,加入要我們寫的非同步操作比較多,或者較為繁瑣,
難道我們new Thread()然後用上述方法通知UI更新麼?程式設計師都是比較喜歡偷懶的,既然官方給我
們提供了AsyncTask這個封裝好的輕量級非同步類,為什麼不用呢?我們通過幾十行的程式碼就可以完成
我們的非同步操作,而且進度可控;相比起Handler,AsyncTask顯得更加簡單,快捷~當然,這隻適合
簡單的非同步操作,另外,實際非同步用的最多的地方就是網路操作,圖片載入,資料傳輸等,AsyncTask
暫時可以滿足初學者的需求,謝謝小應用,但是到了公司真正做專案以後,我們更多的使用第三發的
框架,比如Volley,OkHttp,android-async-http,XUtils等很多,後面進階教程我們會選1-2個框架進行
學習,當然你可以自己找資料學習學習,但是掌握AsyncTask還是很有必要的!


2)AsyncTask的基本結構:
AsyncTask是一個抽象類,一般我們都會定義一個類繼承AsyncTask然後重寫相關方法~
官方API:AsyncTask
• 構建AsyncTask子類的引數:這裡寫圖片描述
• 相關方法與執行流程:這裡寫圖片描述
• 注意事項:這裡寫程式碼片`

後臺程式碼

package com.example.administrator.myapplication;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import
android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView tv; Button btn; ProgressBar pg; @Override protected void onCreate(Bundle savedInstanceState) { super
.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pg = (ProgressBar) findViewById(R.id.progressBar); btn=(Button)findViewById(R.id.btn); tv=(TextView)findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyTask mt=new MyTask(); mt.execute(1000); } }); } //onPreExecute()-> doInBackground -> class MyTask extends AsyncTask<Integer,Integer,String>{ int i; @Override protected void onPreExecute() { super.onPreExecute(); tv.setText("start"); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); tv.setText("finsh"); } @Override protected String doInBackground(Integer... integers) { try { for (i= 0; i<=100; i++){ Thread.sleep(integers[0]); publishProgress(i); } } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); pg.setProgress(values[0]); } } }

效果圖
這裡寫圖片描述