// String:开始异步任务执行时传入的参数类型;Integer:异步任务执行过程中,返回下载进度值的类型;List<FragmentData>:异步任务执行完成后,返回的结果类型; class MyAsyncTask extends AsyncTask<String,Integer,List<FragMentData>>{ // onPreExecute() --> doInBackground() --> publishProgress() --> onProgressUpdate() --> onPostExecute() // 如果不需要执行更新进度则为onPreExecute() --> doInBackground() --> onPostExecute(), // 这个方法会在后台任务开始执行之间调用,在主线程执行。用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。 @Override protected void onPreExecute() { super.onPreExecute(); } // 这个方法中的所有代码都会在子线程中运行,我们应该在这里去处理所有的耗时任务。 @Override protected List<FragMentData> doInBackground(String... params) { return null; } // 当在后台任务中调用了publishProgress(Progress...)方法后,这个方法就很快会被调用,方法中携带的参数就是在后 // 台任务中传递过来的。在这个方法中可以对UI进行操作,在主线程中进行,利用参数中的数值就可以对界面元素进行相应的更新。 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } // 当doInBackground(Params...)执行完毕并通过return语句进行返回时,这个方法就很快会被调用。返回的数据会作为 // 参数传递到此方法中,可以利用返回的数据来进行一些UI操作,在主线程中进行,比如说提醒任务执行的结果,以及关闭掉进度条对话框等。 @Override protected void onPostExecute(List<FragMentData> fragMentDatas) { super.onPostExecute(fragMentDatas); } // 除了上面四个方法,AsyncTask还提供了onCancelled()方法,它同样在主线程中执行,当异步任务取消时,onCancelled()会被调用, // 这个时候onPostExecute()则不会被调用,但是要注意的是,AsyncTask中的cancel()方法并不是真正去取消任务,只是设置这个任务 // 为取消状态,我们需要在doInBackground()判断终止任务。就好比想要终止一个线程,调用interrupt()方法,只是进行标记为中断, // 需要在线程内部进行标记判断然后中断线程。 @Override protected void onCancelled() { super.onCancelled(); } // new DownloadTask().execute(); 在需要启动的地方调用 }
异步详解
最新推荐文章于 2024-06-20 18:59:20 发布