Android AsyncTask 示例及说明 [重复]
Posted
技术标签:
【中文标题】Android AsyncTask 示例及说明 [重复]【英文标题】:Android AsyncTask example and explanation [duplicate] 【发布时间】:2014-10-28 03:56:41 【问题描述】:我想在我的应用程序中使用AsyncTask
,但我无法找到代码 sn-p 并简单地解释了事情的工作原理。我只是想要一些东西来帮助我快速恢复速度,而无需再次涉足 the documentation 或大量问答。
【问题讨论】:
developer.android.com/reference/android/os/AsyncTask.html 有什么问题 还有Using AsyncTask 它的原始形式实际上更好。现在,它看起来对 SO 来说太宽泛了。感谢您愿意分享和帮助。 But even self-answer questions should adhere to SO guidelines。最初的问答很好,只是一个骗局,这并没有错。 See this meta post 【参考方案1】:AsyncTask
是在 Android 中实现并行性的最简单方法之一,无需处理线程等更复杂的方法。尽管它提供了与 UI 线程的基本并行度,但它不应该用于更长的操作(例如,不超过 2 秒)。
AsyncTask 有四个方法
onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
doInBackground()
是最重要的,因为它是执行后台计算的地方。
代码:
这是一个带有解释的骨架代码大纲:
public class AsyncTaskTestActivity extends Activity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// This starts the AsyncTask
// Doesn't need to be in onCreate()
new MyTask().execute("my string parameter");
// Here is the AsyncTask class:
//
// AsyncTask<Params, Progress, Result>.
// Params – the type (Object/primitive) you pass to the AsyncTask from .execute()
// Progress – the type that gets passed to onProgressUpdate()
// Result – the type returns from doInBackground()
// Any of them can be String, Integer, Void, etc.
private class MyTask extends AsyncTask<String, Integer, String>
// Runs in UI before background thread is called
@Override
protected void onPreExecute()
super.onPreExecute();
// Do something like display a progress bar
// This is run in a background thread
@Override
protected String doInBackground(String... params)
// get the string from params, which is an array
String myString = params[0];
// Do something that takes a long time, for example:
for (int i = 0; i <= 100; i++)
// Do things
// Call this to update your progress
publishProgress(i);
return "this string is passed to onPostExecute";
// This is called from background thread but runs in UI
@Override
protected void onProgressUpdate(Integer... values)
super.onProgressUpdate(values);
// Do things like update the progress bar
// This runs in UI when background thread finishes
@Override
protected void onPostExecute(String result)
super.onPostExecute(result);
// Do things like hide the progress bar or change a TextView
流程图:
这里有一张图表可以帮助解释所有参数和类型的去向:
其他有用的链接:
What arguments are passed into AsyncTask<arg1, arg2, arg3>? Slidenerd Android AsyncTask Tutorial: Android Tutorial For Beginners Understanding AsyncTask – Once and Forever Dealing with AsyncTask and Screen Orientation How to pass multiple parameters to AsynkTask how to pass in two different data types to AsyncTask, Android【讨论】:
非常酷的人,我一直在使用的文档通常不存在,但我并不知道我为什么要这样做。 将数据流可视化到构造函数会让图像更漂亮!以上是关于Android AsyncTask 示例及说明 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析