AsyncTask使用方式一
生活随笔
收集整理的這篇文章主要介紹了
AsyncTask使用方式一
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android提供了兩種主要的異步操作方法:
第一種就是采用Thread執行內容,然后通過handler來獲知線程結果以更新UI,但是這種方式對線程的安全性需要程序員來進行控制;
第二種是采用AsyncTask,這種方式是線程安全的,當然也意味著效率會比第一種稍低,不過還是可以接受的。
但是在TabActivity中用AsyncTask方法進行異步操作的時候,如果在超過兩層的activity中使用了 ProgressDialog,就會存在問題。這個大概是Android本身的bug,或者不叫bug,而是一種限制。對于這種情況,目前沒有什么很好的 正規解決方案,不過在大部分情況下可以采用如下workaround來解決。
public class MyActivity extends Activity {protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);//判斷是否存在父ActivityContext c;if(getParent() != null) c = getParent();else c = this;AsyncClass async = new AsyncClass (c);async.execute();}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();}class AsyncClass extends AsyncTask {private Context context;private ProgressDialog progressDlg;public AsyncLoadData(Context c) {this.context = c;}@Overrideprotected String doInBackground(Void... params) {// TODO Auto-generated method stubfillData();return null;}protected void onPostExecute(String result) {//Do some workprogressDlg.cancel();}protected void onPreExecute() {progressDlg = new ProgressDialog(context);progressDlg.setMessage("ing...");progressDlg.setCancelable(false);progressDlg.show();}}} 主要思路很簡單,就是由于是超過兩層的Activity中會出問題,所以就使用父級的Context,這樣就能workaround了。轉載于:https://www.cnblogs.com/cpf20072008/archive/2011/03/27/Android.html
總結
以上是生活随笔為你收集整理的AsyncTask使用方式一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:Ubuntu 开机加载路由设置
- 下一篇: 删除所有的.svn文件夹