AsyncTask使用方式一
生活随笔
收集整理的這篇文章主要介紹了
AsyncTask使用方式一
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android提供了兩種主要的異步操作方法:
第一種就是采用Thread執(zhí)行內(nèi)容,然后通過(guò)handler來(lái)獲知線程結(jié)果以更新UI,但是這種方式對(duì)線程的安全性需要程序員來(lái)進(jìn)行控制;
第二種是采用AsyncTask,這種方式是線程安全的,當(dāng)然也意味著效率會(huì)比第一種稍低,不過(guò)還是可以接受的。
但是在TabActivity中用AsyncTask方法進(jìn)行異步操作的時(shí)候,如果在超過(guò)兩層的activity中使用了 ProgressDialog,就會(huì)存在問題。這個(gè)大概是Android本身的bug,或者不叫bug,而是一種限制。對(duì)于這種情況,目前沒有什么很好的 正規(guī)解決方案,不過(guò)在大部分情況下可以采用如下workaround來(lái)解決。
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();}}} 主要思路很簡(jiǎn)單,就是由于是超過(guò)兩層的Activity中會(huì)出問題,所以就使用父級(jí)的Context,這樣就能workaround了。轉(zhuǎn)載于:https://www.cnblogs.com/cpf20072008/archive/2011/03/27/Android.html
總結(jié)
以上是生活随笔為你收集整理的AsyncTask使用方式一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:Ubuntu 开机加载路由设置
- 下一篇: 删除所有的.svn文件夹