您好!欢迎访问亚搏体育app官网入口!
专注精密制造10载以上
专业点胶阀喷嘴,撞针,精密机械零件加工厂家
联系方式
093-303709759
您当前的位置: 主页 > 新闻动态 > 公司新闻 >

公司新闻

Android使用AsyncTask后监听异步加载完毕的动作

更新时间  2022-07-31 22:01 阅读
本文摘要:AsyncTask的用于方法网上有很多例子,用于一起也十分的便利。这里就不详尽说道明确的用于方法了,同学可以Google一下,很多。

亚搏体育app官网入口

AsyncTask的用于方法网上有很多例子,用于一起也十分的便利。这里就不详尽说道明确的用于方法了,同学可以Google一下,很多。

  场景仿真当我们在读取一个列表的时候,比如GridView,这时候我们考虑到不堵塞UI的作法,一般不会用于线程Thread、Timer或者用于AsyncTask,而这些操作者都是在在后台另外进一个线程给我们去找数据,明确获得的数据必须用于Handler去改版UI,AsyncTask也是一样用于到的Handler只是它将HandlerPCB在了onPostExecute继续执行操作者中。而这一操作者可能会产生一个问题,比如你有一个列表改版数据库用于到的是AsyncTask异步操作者的方式改版UI,而你的市场需求是当我一进去这个列表就统计资料这个列表的数据的数量或者让某一行数据的状态为顺位状态。传统作法是必要new一个AsyncTask类让它execute();之后不会再行操作者UI。点子是对的,但有一个问题我们要注意到,因为它是异步读取数据的方式,而你的数据量较为多也许查询数据必须一定的时间的时候,这时用于AsyncTask继续执行异步读取后改版UI再行操作者UI对象,可能会报空指针。

  这个问题的产生是,我们都告诉代码的继续执行是自上而下继续执行,当你用于异步读取数据的时候,代码让你去继续执行异步操作者就不管了(多线程),而之后会往下继续执行代码,你下面的代码就是操作者列表里面的UI,这时可想而知,异步读取数据还没完结还没对你的UI展开改版,这些你的列表应当是机的,而操作者一个机的列表就不会报空指针。  分析问题  用于过AsyncTask的同学都告诉一个异步读取数据最多要改写以下这两个方法:  doInBackground后台继续执行,较为耗时的操作者都可以放到这里。

留意这里无法必要操作者UI。  onPostExecute相等于Handler处置UI的方式,在这里面可以用于在doInBackground获得的结果处置操作者UI。  有适当的话你还得改写以下这三个方法,但不是必需的:  onProgressUpdate可以用于进度条减少用户体验度。  onPreExecute这里是最终用户调用Excute时的模块  onCancelled用户调用中止时,要做到的操作者  根据上面的思路,可以显现出,最后数据读取并表明出来这一系列的操作者都在onPostExecute这个方法里面,那么如何监听所有UI都己经在onPostExecute里面处置已完成了,再行去继续执行我们自己要操作者呢?  解决问题  这里得出我自己解决问题这一问题的思路,有更佳点子的朋友青睐跟贴联合探究。

  首先创立一个模块  privateinterfaceisLoadDataListener{  publicvoidloadComplete();  }  声明这一模块变量  privateisLoadDataListenerloadLisneter;  给模块赋值,获得模块对象  publicvoidsetLoadDataComplete(isLoadDataListenerdataComplete){  this.loadLisneter=dataComplete;  }  之后在AsyncTask的onPostExecute处置UI已完成后调用该模块,下面得出一个我以前项目用于到的AsyncTask类:  classloadGridAsyncTaskextendsAsyncTask《Integer,Integer,AppsAdapter》{  privateintpoindex;  publicloadGridAsyncTask(intpositionindex){  this.poindex=positionindex;  }  @Override  protectedAppsAdapterdoInBackground(Integer.。.params){  //TODOAuto-generatedmethodstub  //mAppsModel.clear();  Cursortemp=dbHelper.queryPageById(poindex);  loadPage(mApps,temp);  temp.close();  returnnewAppsAdapter(STB.this,mAppsModel);  }  @Override  protectedvoidonPostExecute(AppsAdapterresult){  gridViewExtitemGrid=(gridViewExt)viewFlipper  .getChildAt(poindex);  itemGrid.setColumnCount(pageColumnCount);  itemGrid.setAdapter(result);  if(loadLisneter!=null){  loadLisneter.。


本文关键词:Android,使用,AsyncTask,亚搏体育app官网入口,后,监听,异步,加载,完毕

本文来源:亚搏体育app官网入口-www.taolugroup.com