Android 线程AsyncTask

1.AsyncTask

Android已经到了最后阶段,突然蹦出来线程这一难题,真的是把我弄晕了
首先我们明确为什么存在线程? 我们已经存在一个主程序,为什么要加一个呢?当我们的程序在请求网络时,我们希望主程序还可以运行吗?现在的程序一般都是后台下载,那前台下载你见过吗?点完下载,程序就变成下载的进度条了,软件不能用了;这样当然是不好的,所以才有了线程;

就像是一个客栈,有大厨,有掌柜的,有跑堂的;如果说这家客栈就一个人,那是不是就忙不过来了呢;

我们要看的程序是一个从网站获取链接与信息的程序;

1
2
public class FilckrFetchr {//网络连接相关代码,不是今天重点
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class PhotoGallleryFargment extends Fragment{
public void onCreate(Bundle s)
{
super.onCreate(s);
setRetainInstance(true);
new FetchItemsTask().execute();//在此处开启线程
}
private class FetchItemsTask extends AsyncTask<Void,Void,ArrayList<GalleryItem>>//主程序中的内部类,线程类
{
@Override
protected ArrayList<GalleryItem> doInBackground(Void... params)
{
// try //此处获取百度的THML
// {
// String result = new FilckrFetchr().geturl("http://www.baidu.com");
// Log.i(TAG , "Fetched contents of URL: "+result);
// Log.d(TAG,"LALALALALALAL");
// }catch (IOException io)
// {
// Log.e(TAG, "Failed to fetch URL "+io);
// }
return new FilckrFetchr().fetchItems();//调用网络连接,获取items
}
@Override
protected void onPostExecute(ArrayList<GalleryItem> items)
{
mitems = items;
setupAdapter();//当doInBackground有返回值时,onPostExecute执行,就可以改变主线程的视图了;
}
}

是不是很简单。就像是掌柜的饿了,让大厨做饭去了;大厨做完端过来,掌柜的就可以吃了;大厨做饭的时候,掌柜的就可以想干嘛干嘛;