这个类一共包含3个参数,4个方法。
如何去理解
看文档可以看到我们要新建一个类继承于AsyncTask这个类
- public void onClick(View v) {
- new DownloadImageTask().execute("http://example.com/image.png");
- }
- private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
- /** The system calls this to perform work in a worker thread and
- * delivers it the parameters given to AsyncTask.execute() */
- protected Bitmap doInBackground(String... urls) {
- return loadImageFromNetwork(urls[0]);
- }
- /** The system calls this to perform work in the UI thread and delivers
- * the result from doInBackground() */
- protected void onPostExecute(Bitmap result) {
- mImageView.setImageBitmap(result);
- }
- }
其次这里面的方法的有哪些以及调用顺序,以及所在的线程
- class GetImage extends AsyncTask<Object, Object, Object>
- {
- @Override
- protected void onPreExecute() {
- //执行耗时操作前的准备,属于UI主线程
- super.onPreExecute();
- }
- @Override
- protected Object doInBackground(Object... params) {
- /**
- *
- * 执行耗时操作,属于非UI主线程 这里面的参数,对应于泛型1
- 而且是可由外面传递,其中Object...是指一个不确定大小的Object数组
- 在此类里面可以调用一个叫做publishProgress(Object...) 的方法(参数对应泛型2)
- 该方法将会调用下面的onProgressUpdate(Object... values)方法(参数对应泛型2)
- 该方法的最终调用结果返回给onPostExecute(Object result)方法。并接着执行onPostExecute(Object result)
- */
- return null;
- }
- @Override
- protected void onProgressUpdate(Object... values) {
- //根据publishProgress(Object...)执行本方法 ,属于UI主线程
- super.onProgressUpdate(values);
- }
- @Override
- protected void onPostExecute(Object result) {
- //处理耗时操作的结果,属于UI主线程。其中result是doInBackground的返回值
- super.onPostExecute(result);
- }
初始化以及调用它
- Object[] object=new Object[]{};
- new GetImage().execute(object,object,object);
- The task instance must be created on the UI thread.
- execute(Params...) must be invoked on the UI thread.
- Do not call onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...) manually.
- The task can be executed only once (an exception will be thrown if a second execution is attempted.)
2,execute方法也必须在ui线程执行
3.不要调用
- onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)