1.什么是AsyncTask
AsyncTask就是处理一些耗时的任务最典型的就是加载外部数据
2.为什么使用AsyncTask
这里不得不提下Android的单线程模型
主线程通常又被叫做UI线程。在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。
写一个简单的含有一个按钮的程序,并为按钮注册一个单击事件,并在事件处理器中调用这样的代码Thread.sleep(2000)。在按下这个按钮这后恢复按钮的正常状态之前,它会保持按下状态大概2秒钟。如果这样的情况在你编写的应用程序中发生,用户的第一反应就是你的程序运行很慢。所有要避免在UI线程中执行耗时的操作。
android中提供了一个类Handler来在子线程中来更新UI线程,用发消息的机制更新UI界面,呈现给用户。这样就解决了子线程更新UI的问题。但是费时的任务操作总会启动一些匿名的子线程,太多的子线程给系统带来巨大的负担,随之带来一些性能问题。
3.如何使用AsyncTask
用法很简单
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();