在Android中很多时候程序的运行并不是一瞬间就搞定的,而是需要一定的时间。如果在UI主线程中执行,那么界面就会被堵在这里,也就是说UI主线程被阻塞了,这对用户来说体验非常差。而AsyncTask就提供了一个很好的解决方案,它可以在后台执行一些任务,并且可以跟UI线程进行一些通讯。
今天在工作中,需要写几个类,其中一个是处理网络连接的,第一次自己把它放在了主线程中,结果就是运行的时候,由于连网并不能在很短的时间内完成,导致屏幕卡住了,按菜单键都不管用。当然,这只是我自己不成熟的写法,如果在实际产品中出现这种情况,那你的产品就会被用户直接说拜拜了。使用了AsyncTask之后,即使任务消耗的时间再多,也不会影响到UI界面了。
通常AsyncTask是这样的:
其中,param2和param3分别是progress和result,即一个过程一个结果。通常param1才是我们最关心的,因为这个才是传递进来,需要做一些操作的参数。那么如何使用这个参数呢?比如你想要传递一个String类型的,那么应该这么玩:
也就是说,实际上得到的是str[]数组的第一个值。
好吧,自己也感觉说的乱乱的,还是跟以前说的一样,这里纯粹是 无量阁电子书自己学些Android的记录,对其他人的帮助不大,至少短时间内这种情况很难改变。也许在遥远的将来,我也能成为一个在Android开发方面信手拈来的达人?自己很期待这一天,当然这个过程不会太轻松的。
今天在工作中,需要写几个类,其中一个是处理网络连接的,第一次自己把它放在了主线程中,结果就是运行的时候,由于连网并不能在很短的时间内完成,导致屏幕卡住了,按菜单键都不管用。当然,这只是我自己不成熟的写法,如果在实际产品中出现这种情况,那你的产品就会被用户直接说拜拜了。使用了AsyncTask之后,即使任务消耗的时间再多,也不会影响到UI界面了。
通常AsyncTask是这样的:
AsyncTask(param1, param2, param3) {
onPreExecute() {
}
doInBackground(param1) {
......
}
onProgressUpdate(param2) {
}
onPostExecute(param3) {
}
}
其中,param2和param3分别是progress和result,即一个过程一个结果。通常param1才是我们最关心的,因为这个才是传递进来,需要做一些操作的参数。那么如何使用这个参数呢?比如你想要传递一个String类型的,那么应该这么玩:
AsyncTask(String, param2, param3) {
String str1 = null;
onPreExecute() {
}
doInBackground(String str) {
str1 = str[0];
......
}
onProgressUpdate(param2) {
}
onPostExecute(param3) {
}
}
也就是说,实际上得到的是str[]数组的第一个值。
好吧,自己也感觉说的乱乱的,还是跟以前说的一样,这里纯粹是 无量阁电子书自己学些Android的记录,对其他人的帮助不大,至少短时间内这种情况很难改变。也许在遥远的将来,我也能成为一个在Android开发方面信手拈来的达人?自己很期待这一天,当然这个过程不会太轻松的。