Android AsyncTask(异步任务)

1.什么是AsyncTask

  AsyncTask就是处理一些耗时的任务最典型的就是加载外部数据

2.为什么使用AsyncTask

  这里不得不提下Android的单线程模型

   当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。所以主线程通常又被叫做UI线程在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。

   写一个简单的含有一个按钮的程序,并为按钮注册一个单击事件,并在事件处理器中调用这样的代码Thread.sleep(2000)。在按下这个按钮这后恢复按钮的正常状态之前,它会保持按下状态大概2秒钟。如果这样的情况在你编写的应用程序中发生,用户的第一反应就是你的程序运行很慢。所有要避免在UI线程中执行耗时的操作。

  当然android中提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。这样就解决了子线程更新UI的问题。但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。

3.如何使用AsyncTask

    用法很简单

   1.先定义一个类继承自 AsyncTask 有些方法必须重新,下面已经列出

	class UpdateTask extends AsyncTask<Integer, Integer, String>{
		    @Override  
	        protected void onPreExecute() {  
	            super.onPreExecute();  
	        }  
	          
	        @Override  
	        protected String doInBackground(Integer... params) {
	        	//在这里做加载数据的操作,我这里是检查是否有新版本
	        	UpdateClient uc = new UpdateClient(Main_Activity.this);
	        	return uc.checkIfStartUpdateApp(uc.getOldVersion(),"?services=AppUpdateService&action=getAppNewVersion");
	            
 	        }  
	  
	        @Override  
	        protected void onProgressUpdate(Integer... progress) {
	            super.onProgressUpdate(progress);  
	        }  
	        //这个方法的参数result就是doInBackground()方法的返回值
	        @Override  
	        protected void onPostExecute(String result) {
	        	if("true".equalsIgnoreCase(result))
		        {
	        	   Toast.makeText(Main_Activity.this,"有可用的新版本,请您更新!", 4000).show();
			 }else if("con_err".equalsIgnoreCase(result))
			{
			   Toast.makeText(Main_Activity.this,"当前网络不可用,请检查!", 4000).show();
			}
	            super.onPostExecute(result);  
	        } 
	}

    然后在一个Activity的onCreate()方法下调用即可

        new UpdateTask().execute();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值