AsyncTask(异步任务)讲解-android的学习之旅(四十六)
2015-06-22 11:21
696 查看
AsyncTask简介
Android的UI线程主要处理用户的按键,触屏和View的绘制等,不能在里面处理耗时的操作,否则会出现ANR,因此耗时的操作要单独开一个线程处理,但是新线程不能直接处理UI线程的View。
AsyncTask的使用方法
代码示例
本实例只有一个按钮和文本框,点击按钮从网络下载数据,然后又在文本框显示。package peng.liu.test; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.TextView; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class MainActivity extends Activity{ private TextView tvAsync; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvAsync = (TextView) findViewById(R.id.tvAsync); } public void download(View source) throws MalformedURLException { DownTask downTask = new DownTask(this); downTask.execute(new URL("http://www.carzyit.org/ethos.php")); } class DownTask extends AsyncTask<URL,Integer,String>{ ProgressDialog dialog; int hasdata; Context context; public DownTask(Context ctx){ this.context = ctx; } @Override protected String doInBackground(URL... urls) { StringBuilder sb = new StringBuilder(); try { URLConnection conn = urls[0].openConnection(); BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); String line = null; while ((line = bf.readLine()) != null){ sb.append(line); hasdata++; publishProgress(hasdata); } return sb.toString(); } catch (Exception e){ e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { tvAsync.setText(s); dialog.dismiss(); } @Override protected void onPreExecute() { dialog = new ProgressDialog(context); dialog.setTitle("hello"); dialog.setCancelable(false); dialog.setMessage("world"); dialog.setMax(202); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setIndeterminate(false); dialog.show(); } @Override protected void onProgressUpdate(Integer... values) { tvAsync.setText(hasdata+""); dialog.setProgress(values[0]); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories