安卓异步—AsysncTask
来源:互联网 发布:比特币源码是什么语言 编辑:程序博客网 时间:2024/04/28 21:26
首先
由于安卓对于UI的 操作只能在主线程中,所以一些相关的耗时操作只能在子线程中完成所以一般在子线程中完成操作后一般会调用
Activity.runOnUIThread(Runnable)
来返回主线程但是有时候这样的操作会过于繁琐
所以我们可以用AsyncTask来进行异步操作
由于AsyncTask 是一个抽象类 我们在使用的时候必须去实现它的方法。 继承是它指定了3个泛型参数
1.prams 在执行AsynTask时候需要传入的参数 比如加载网页 我们可以传入URL
2.progress 后台执行任务时候如果需要在界面上显示当前进度则他就可以指定我进度的单位
2.Result 当任务执行完成是 的返回值
其中doInbackground 的方法是必须实现的 我们应该在它里面进行耗时操作
onpostExecute方法是用来返回主线程操作的
具体实例
AsyncTask加载图片
public class textforAsyncTsak extends AppCompatActivity { private String Url = "http://img.my.csdn.net/uploads/201504/12/1428806103_9476.png"; private ImageView mimageView; private ProgressBar mprogressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_textfor_async_tsak); mimageView = (ImageView) findViewById(R.id.muuc); mprogressBar = (ProgressBar) findViewById(R.id.AsyncTack); AsyncTaskdemo asyncTaskdemo = new AsyncTaskdemo(); asyncTaskdemo.execute(Url); } class AsyncTaskdemo extends AsyncTask<String,Void,Bitmap>{ @Override protected void onPreExecute() { super.onPreExecute(); mprogressBar.setVisibility(View.VISIBLE); } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); //mprogressBar.setVisibility(View.INVISIBLE); mimageView.setImageBitmap(bitmap); } @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap = null; try{ OkHttpClient client = new OkHttpClient(); Request requuset = new Request.Builder() .url(Url) .build(); Response response = client.newCall(requuset).execute(); InputStream is = response.body().byteStream(); BufferedInputStream bu = new BufferedInputStream(is); bitmap = BitmapFactory.decodeStream(bu); } catch (IOException e) { e.printStackTrace(); } return bitmap; } }}
这里我们用到了OKHTTP去解析网上的文件 然后转化成输入流 在转为biymap 类型变量来加载
我们可以看到具体的操作全部在doInBackground中进行 而在onPostExecte 方法中 他就是主线程操作
值得一提的是 如果要调用到 onProgressUpate方法我们需要在doInBackground 中调用publishProgress()方法即可
至于在活动中调用就是在下面的代码中用对象调用.execute(); 即可运行
AsyncTaskdemo2 asyncTaskdemo2 = new AsyncTaskdemo2(); asyncTaskdemo2.execute();
然后我们在用一个Activity去调用这个Activity 完成操作
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.image_set); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this,textforAsyncTsak.class)); } }); }}
0 0
- 安卓异步—AsysncTask
- 安卓异步任务
- 【读书笔记】安卓异步任务
- 安卓异步任务AsyncTask
- 安卓异步处理——AsyncTask<Params, Progress, Result>
- 安卓异步处理的使用AsyncTask
- 安卓异步代理服务器客户端理解
- 安卓异步代理服务器客户端理解
- 安卓异步代理服务器客户端理解
- 安卓异步处理 打开html代码
- 安卓异步图片加载器
- 安卓异步消息处理机制
- 安卓异步消息处理机制ALooperRoster
- 安卓异步消息处理机制ALooper
- 安卓开发之安卓异步加载AsyncTask
- 安卓异步线程消息机制学习——Handler+Thread+Looper
- 安卓异步任务类AsyncTask——突出一个简单、好用
- ImageLoader 安卓异步加载图片开源工具类
- CSS3 二级菜单
- Unity调用高德地图API,获取定位信息(Android)
- strust2通配符传值
- strust2中404页面处理
- strust2集合共享
- 安卓异步—AsysncTask
- 杂七杂八
- strust2全局转发和全局错误
- oj1913: 成绩评估
- 欢迎使用CSDN-markdown编辑器
- 2015 神奇的幻方(...改变的开始...)
- strust2的json数据
- 如何一步一步用DDD设计一个电商网站(十四)—— 回顾与总结
- 使用Twitter注册教程