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 示例及说明 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

示例:使用AsyncTask的Android双向网络套接字

android:异步任务asyncTask介绍及异步任务下载图片(带进度条)

Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

Android Socket、AsyncTask、Handler 内存泄漏

AsyncTask的使用及原理分析

Android Socket,AsyncTask,Handler内存泄漏