异步详解

//        String:开始异步任务执行时传入的参数类型;Integer:异步任务执行过程中,返回下载进度值的类型;List:异步任务执行完成后,返回的结果类型;
        class MyAsyncTask extends AsyncTask,Integer,List>{
//        onPreExecute() --> doInBackground() --> publishProgress() --> onProgressUpdate() --> onPostExecute()
//        如果不需要执行更新进度则为onPreExecute() --> doInBackground() --> onPostExecute(),


//        这个方法会在后台任务开始执行之间调用,在主线程执行。用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

//            这个方法中的所有代码都会在子线程中运行,我们应该在这里去处理所有的耗时任务。
            @Override
            protected List 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 fragMentDatas) {
                super.onPostExecute(fragMentDatas);
            }

//            除了上面四个方法,AsyncTask还提供了onCancelled()方法,它同样在主线程中执行,当异步任务取消时,onCancelled()会被调用,
//            这个时候onPostExecute()则不会被调用,但是要注意的是,AsyncTask中的cancel()方法并不是真正去取消任务,只是设置这个任务
//            为取消状态,我们需要在doInBackground()判断终止任务。就好比想要终止一个线程,调用interrupt()方法,只是进行标记为中断,
//            需要在线程内部进行标记判断然后中断线程。
            @Override
            protected void onCancelled() {
                super.onCancelled();
            }

//            new DownloadTask().execute(); 在需要启动的地方调用
        }

你可能感兴趣的:(异步详解)