本篇内容主要讲解“怎么构建AsyncTask”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么构建AsyncTask”吧!Android 单线程模型,多线程的操作系统耗时操作放在非主线程中运行子线程中更新UI封装简化异步操作AsyncTaskdoInBackground(): 必须重写,异步执行后台线程将要完成的任务onPreExecute(): 执行后台线程前被调用,通常用来做一些初始化操作onPostExecute(): 当doInBackground() 方法完成后系统会自动调 用,并将doInBackground() 方法的返回值作为参数春递给onPostExecute()方法onProgressUpdate(): 在doBackground() 方法中调用publishProgress()方法更新任务的执行进度后,就会调用该方法接下来我们写个程序测试一下这些方法的执行顺序首先创建一个AsyncTask的子类 MyAsyncTask在 MainActivity 中进行测试在模拟器上部署运行之后,查看Logcat 可以看到下面的日志从日志中可以看到,几个方法的执行顺序依次为 : onPreExecute –>doInBackground –>onPostExecute然后我们在doInBackground 方法中添加这句代码 publishProgress();再次运行,观察logcat 输出,可看到在 doInBackground() 方法中执行了 publishProgress()方法后会调用 onProgressUpdate() 方法,顾名思义就是更新进度条的方法下面我们来看一个典型的异步操作的例子,网络操作,从 Android4.0 之后,网络操作就严禁被放入到主线程中执行.下面是一个采用在异步线程处理下载图像
在UI线程设置图像的例子布局界面代码比较简单,如下MainActivity代码如下上面代码注释很详细,不再多做解释,只要搞懂了 AsyncTask 的几个方法的作用于执行周期,上面的代码很容易理解.下面我们再通过一个模拟进度条的小例子,进一步认识AsyncTask 异步任务的用法布局界面很简单,如下Activity 代码也很简单是不是很简单,但是不要高兴太早,对于这个程序,当我们点击下载,然后点击返回,然后再点击下载,进度条居然等了好久才开始更新这是为啥呢?其实AsyncTask 底层是通过线程池进行作用的,当一个线程没有作用完毕的时候,其它线程即必须进入线程池进行等待,等到前面的线程完事后,才会轮到自己执行,所以,当我们返回再次进入的时候,因为前一个线程正在执行更新进度条操作,所以当前线程必须等待前一个AsyncTask执行完毕后自己才可以执行.那么如何解决这个问题呢?其实很简单,AsyncTask 框架已经为我们考虑到了这个问题,我们可以通过 cancel() 方法来取消掉一个AsyncTask开启的一个异步任务.此方法接受一个布尔值的参数,我们要做的很简单,重写Activity的 onPause() 方法,把AsyncTask的声明周期和Activity绑定到一起. 并且在 doInBackground() 方法中做异步判断.代码如下并且在 onProgressUpdate () 方法中也做同样处理好了一切都做完了,我们再次运行程序可以看到这里有一个注意事项,是关于AsyncTask 的 cancel(true);方法.其实当我们调用了 AsyncTask的cancel(true)方法时,并不会中断当前的线程,有人对此做出的解释是AsyncTask不会不考虑结果而直接结束一个线程。调用cancel()其实是给AsyncTask设置一个”canceled”状态。这取决于你去检查AsyncTask是否已经取消,之后决定是否终止你的操作。对于mayInterruptIfRunning——它所作的只是向运行中的线程发出interrupt()调用。在这种情况下,你的线程是不可中断的,也就不会终止该线程。说的不是很清楚,我们可以查看 cancel()方法的源代码可以看到,这里只是调用了该线程的 t.interrupt(); 方法.对java线程中断机制的理解在此就显得非常重要了:Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己,所以我们要想完全停掉这个线程,最好的做法是通过isCanceled()方法.做出显影的判断到此,相信大家对“免费云主机域名怎么构建AsyncTask”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
这篇文章主要讲解了“ZooKeeper必会的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ZooKeeper必会的知识点有哪些”吧!ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。