android学习_AsyncTask(异步任务)
2013-10-31 20:38
567 查看
看完这段话,其实觉得此书还是一个很不错的书,起码本节的第一段,就直入主题,看到这,我就知道了,其实异步请求就是我们需要的,都在主线程中做操作是不可取的,而且笔者也在强调不要去记20S这个数,他的意思就是,你优化的再好,也最好让其他线程来辅助完成耗时的操作。这也让我对这个异步任务很感兴趣,呵呵。
笔者谈到了4种解决UI组件更新的问题,因为在多线程中是不可以直接更新UI组件的,其中第一种Handler的处理方案,已经试过了,比较好用,其他三种笔者说不太好用,。。估计也就不试了,然后接下来看我们的AsyncTask。
使用注意:
每个AsyncTask只能被执行一次,这个可一定记好了。。 哈。
public class MainActivity extends Activity { private TextView show; // 1.必须在UI主线程中创建AsyncTask的实例 // 这三个参数: // 1)入参:URL类型的参数 在UI主线程中 excute传入的参数 // 2)进度条:参数是Integer 整数的 // 3)返回值:返回值为String class MyAsyncTask extends AsyncTask<URL, Integer, String>{ Context mContext; //获取主UI的上下文句柄, 这样方便更改UI组件状态 ProgressDialog pdialog; //进度条 StringBuffer sb = new StringBuffer(); int hasread = 0; public MyAsyncTask(Context context){ this .mContext = context; } /** * 当启动此线程之前 执行此方法 ,,也就是一些预处理的方法 */ @Override protected void onPreExecute() { //初始化进度条 pdialog = new ProgressDialog(mContext ); pdialog.setCancelable( false );//没有取消按钮 pdialog.setTitle( "正在读取..." ); pdialog.setMessage( "稍等。。。" ); pdialog.setMax(200); pdialog.setProgressStyle(ProgressDialog. STYLE_HORIZONTAL );//设置样式 pdialog.setIndeterminate( false );//是否显示进度条 pdialog.show(); //显示进度条 } /** * 完成的后执行的方法,这里的参数 是有后台的主要处理方法doInBackground传过来的 */ @Override protected void onPostExecute(String result) { show.setText(result); pdialog.dismiss(); } /** * 进度更新时候,调用的方法,这里边的values 是由doInBackGround方法 调用pulishProgress传过来的。 */ @Override protected void onProgressUpdate(Integer... values) { show.setText( "已经读取了" + values[0] + "行了..." ); pdialog.setProgress(values[0]); //更新进度条 } /** * 这就是完成工作最多的方法,它几乎完成了大部分的实际工作。 */ @Override protected String doInBackground(URL... paramArrayOfParams) { try { URLConnection conn = paramArrayOfParams[0].openConnection();//获取传来的参数 BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null ; while ((line = br.readLine())!= null ) { sb.append(line); hasread++; publishProgress( hasread); } return sb .toString(); } catch (IOException e) { e.printStackTrace(); } return null ; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_main); //获取TextView组件 show = (TextView)findViewById(R.id.show ); } public void holdbtnClick(View source){ //2.在UI主线程中调用excute 方法 MyAsyncTask mt = new MyAsyncTask(this ); try { mt.execute( new URL("http://www.myt360.com" )); } catch (MalformedURLException e) { e.printStackTrace(); } } }
xml:
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:id= "@+id/ll" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" > <TextView android:id ="@+id/show" android:layout_width ="match_parent" android:layout_height ="400dp" android:layout_gravity ="center" /> <Button android:id ="@+id/holdbtn" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:onClick ="holdbtnClick" android:text = "获取"/> </ LinearLayout>
相关文章推荐
- android学习---异步任务(AsyncTask)
- android学习之异步任务AsyncTask
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- android学习---异步任务(AsyncTask)
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- Android学习杂记(二):异步任务AsyncTask详解
- Android(java)学习笔记149:AsyncTask(异步任务)和Handler(消息机制)
- Android 异步任务:AsyncTask 学习解析及基本使用 (Android单线程模式)
- Android学习篇章42-AsyncTask-异步任务类
- Android基础学习之AsyncTask(异步任务处理类)一
- 深入学习Android异步任务-AsyncTask
- Android基础学习之AsyncTask(异步任务处理类)二
- Android学习之异步任务AsyncTask
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- android 学习--异步任务类AsyncTask
- android studio for android learning (二十一 )异步任务AsyncTask加载美女图片攻略及AsyncTask源码详解
- AsyncTask实例代码演示Android异步任务
- Android中的AsyncTask异步任务的简单介绍
- Android中的线程池和AsyncTask异步任务(二)
- android异步任务AsyncTask