- 浏览: 169812 次
- 性别:
- 来自: 北京
-
最新评论
-
wangzhengfu:
看你这文章很纠结,既然把图贴出来了,为啥不贴上代码呢
android EditText 去除边框 -
sovio:
...
android EditText 去除边框 -
kdac:
啥J8翻译啊,谷歌翻译贴出来的吧?翻译不了就放原文,不伦不类, ...
android 弹出软键盘将底部视图顶起问题 -
shiny_txdd:
17:34:47,806 ERROR [ContextLoad ...
tomcat项目转jboss5.0 -
lenomon:
这里有篇实现无下划线的,Android使用TextView实现 ...
Android TextView中文字设置超链接、颜色、字体
不用handler更细页面的另一种更新方式:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.
When an asynchronous task is executed, the task goes through 4 steps: 1. onPreExecute(), invoked on the UI thread immediately after the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface. 2. doInBackground(Params...), invoked on the background thread immediately after onPreExecute() finishes executing. This step is used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use publishProgress(Progress...) to publish one or more units of progress. These values are published on the UI thread, in the onProgressUpdate(Progress...) step. 3. onProgressUpdate(Progress...), invoked on the UI thread after a call to publishProgress(Progress...). The timing of the execution is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar or show logs in a text field. 4. onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter.
BaseActivity中用到了AsyncTask的概念:
public abstract class BaseActivity extends Activity { /** * Performs a task in the background, showing a {@link ProgressDialog}, * while the {@link Callable} is being processed. * * @param <T> * @param pTitleResID * @param pMessageResID * @param pErrorMessageResID * @param pCallable * @param pCallback */ protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback) { this.doAsync(pTitleResID, pMessageResID, pCallable, pCallback, null); } /** * Performs a task in the background, showing a indeterminate {@link ProgressDialog}, * while the {@link Callable} is being processed. * * @param <T> * @param pTitleResID * @param pMessageResID * @param pErrorMessageResID * @param pCallable * @param pCallback * @param pExceptionCallback */ protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) { new AsyncTask<Void, Void, T>() { private ProgressDialog mPD; private Exception mException = null; @Override public void onPreExecute() { this.mPD = ProgressDialog.show(BaseActivity.this, BaseActivity.this.getString(pTitleResID), BaseActivity.this.getString(pMessageResID)); super.onPreExecute(); } @Override public T doInBackground(final Void... params) { try { return pCallable.call(); } catch (final Exception e) { this.mException = e; } return null; } @Override public void onPostExecute(final T result) { try { this.mPD.dismiss(); } catch (final Exception e) { Debug.e("Error", e); } if(this.isCancelled()) { this.mException = new CancelledException(); } if(this.mException == null) { pCallback.onCallback(result); } else { if(pExceptionCallback == null) { Debug.e("Error", this.mException); } else { pExceptionCallback.onCallback(this.mException); } } super.onPostExecute(result); } }.execute((Void[]) null); } /** * Performs a task in the background, showing a {@link ProgressDialog} with an ProgressBar, * while the {@link AsyncCallable} is being processed. * * @param <T> * @param pTitleResID * @param pMessageResID * @param pErrorMessageResID * @param pAsyncCallable * @param pCallback */ protected <T> void doProgressAsync(final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback) { this.doProgressAsync(pTitleResID, pCallable, pCallback, null); } /** * Performs a task in the background, showing a {@link ProgressDialog} with a ProgressBar, * while the {@link AsyncCallable} is being processed. * * @param <T> * @param pTitleResID * @param pMessageResID * @param pErrorMessageResID * @param pAsyncCallable * @param pCallback * @param pExceptionCallback */ protected <T> void doProgressAsync(final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) { new AsyncTask<Void, Integer, T>() { private ProgressDialog mPD; private Exception mException = null; @Override public void onPreExecute() { this.mPD = new ProgressDialog(BaseActivity.this); this.mPD.setTitle(pTitleResID); this.mPD.setIcon(android.R.drawable.ic_menu_save); this.mPD.setIndeterminate(false); this.mPD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); this.mPD.show(); super.onPreExecute(); } @Override public T doInBackground(final Void... params) { try { return pCallable.call(new IProgressListener() { @Override public void onProgressChanged(final int pProgress) { onProgressUpdate(pProgress); } }); } catch (final Exception e) { this.mException = e; } return null; } @Override public void onProgressUpdate(final Integer... values) { this.mPD.setProgress(values[0]); } @Override public void onPostExecute(final T result) { try { this.mPD.dismiss(); } catch (final Exception e) { Debug.e("Error", e); /* Nothing. */ } if(this.isCancelled()) { this.mException = new CancelledException(); } if(this.mException == null) { pCallback.onCallback(result); } else { if(pExceptionCallback == null) { Debug.e("Error", this.mException); } else { pExceptionCallback.onCallback(this.mException); } } super.onPostExecute(result); } }.execute((Void[]) null); } /** * Performs a task in the background, showing an indeterminate {@link ProgressDialog}, * while the {@link AsyncCallable} is being processed. * * @param <T> * @param pTitleResID * @param pMessageResID * @param pErrorMessageResID * @param pAsyncCallable * @param pCallback * @param pExceptionCallback */ protected <T> void doAsync(final int pTitleResID, final int pMessageResID, final AsyncCallable<T> pAsyncCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) { final ProgressDialog pd = ProgressDialog.show(BaseActivity.this, this.getString(pTitleResID), this.getString(pMessageResID)); pAsyncCallable.call(new Callback<T>() { @Override public void onCallback(final T result) { try { pd.dismiss(); } catch (final Exception e) { Debug.e("Error", e); /* Nothing. */ } pCallback.onCallback(result); } }, pExceptionCallback); } // =========================================================== // Inner and Anonymous Classes // =========================================================== public static class CancelledException extends Exception { private static final long serialVersionUID = -78123211381435596L; } }
发表评论
-
Android中canvas和paint的关系及使用
2011-11-30 10:15 2252刚刚开始接触学习Android的同鞋们在看到工程中出现的那么 ... -
Android 模仿renren的左右划动菜单栏
2011-11-10 13:47 2561模仿renren的左右划动菜单栏,主要通过Horizo ... -
android 抓包
2011-07-12 10:28 39881、下载TcpDump for Android ,或者本地下 ... -
Android参数设置父布局集体宽高
2011-06-21 11:47 3445LinearLayout gridContainer = (L ... -
Android应用按返回键完全退出应用
2011-06-07 17:58 7234很多网友可能发现自己 ... -
GIT和repo使用方法,下载android-2.6.29内核
2011-06-07 14:45 2003http://hi.baidu.com/kkernel/ ... -
动态增加TableLayout的行
2011-06-02 15:43 2551Just like HTML Tables on webpag ... -
如何申请 android google map API key
2011-06-01 15:16 16291.首先要得到你的debug keystore位置: 打 ... -
Android TextView中文字设置超链接、颜色、字体
2011-05-27 12:27 5394TextView是用来显示文本的,有时需要给TextView中 ... -
设置ProgressBar的颜色
2011-05-26 10:05 2265在《Android/OPhone开发完全讲义》 ... -
Android 调用系统的照相,浏览图片,转存并裁剪!
2011-05-25 12:59 4610public class AddCardActivity ex ... -
修改TabHost默认样式
2011-05-10 13:52 3205TabHost是Android提供的一个容器组件, ... -
Android控件美化Shape
2011-05-04 09:59 1216当然除了使用drawable这样的图片外今天谈下自定义图形 ... -
android开发中WebView的使用(附完整程序)
2011-05-03 14:00 2121WebView是个好东西,作用相当于一个迷你的浏览器,采用We ... -
android 弹出软键盘将底部视图顶起问题
2011-04-19 13:20 6985今天要做一个搜索功能,搜索界面采用AutoCompleteTe ... -
自定义ListView行间的分割线
2011-04-18 10:18 1613在Android平台中系统控件提供了灵活的自定义选项,所有 ... -
android xml中应用占位符
2011-04-02 18:24 1576Formatting and Styling Here ar ... -
android Toast大全(五种情形)建立属于你自己的Toast
2011-04-02 18:18 939Toast用于向用户显示一些帮助/提示。下面我做了5中效果,来 ... -
JadEclipse工具的使用
2011-04-01 11:49 2574JadEclipse工具的使用 1、下载工具 JadEcl ... -
Android 反编译apk 到java源码的方法
2011-04-01 11:20 975Android由于其代码是放在dalvik虚拟机上的托管代码, ...
相关推荐
### AndEngine分析之三——AsyncTask与BaseActivity深入解析 #### 一、AsyncTask概述 在AndEngine项目中,为了实现界面更新等操作时避免主线程阻塞的问题,使用了`AsyncTask`来处理后台任务。`AsyncTask`提供了一...
通过研究和分析《DeliveryBoy》的源代码,你可以深入理解AndEngine的工作原理,同时也能学习到游戏开发的常用技巧和最佳实践。这将有助于你独立开发自己的2D Android游戏,提升你的编程技能和创新能力。在实践中不断...
它继承自 BaseActivity,并实现了 IGameInterface 接口。 BaseGameActivity 的主要作用是: 1. 创建Engine:BaseGameActivity 负责创建游戏引擎,并将其与 SurfaceView 关联起来。 2. 管理SurfaceView:...
本文将探讨如何在AndEngine中实现后台加载资源,同时展示一个使用AsyncTask来处理加载过程的示例。 在Android应用中,由于主线程(UI线程)负责处理用户界面的更新,如果在主线程中执行耗时的操作,如加载大量资源...
AndEngine 2013-2月 最新Example,直接导入Eclipse即可,API15, 环境 Android 4.0.3
AndEngine游戏开发指南初级篇主要讲解了使用AndEngine游戏引擎进行Android平台下的2D游戏开发的基础知识。AndEngine是一个开源的2D游戏开发框架,它基于libGDX框架开发,使用OpenGL ES(Open Graphics Library for ...
AndEngine 2013-3-12 最新Jar包,直接拉进项目libs即可,可查看源代码
官方版本,亲测可用
Andengine-Android-Studio是将Andengine集成到Android Studio的模块,方便开发者在现代的Android开发环境中进行游戏开发。 Andengine的主要特点包括: 1. **轻量级**:Andengine的体积小巧,性能高效,对设备资源...
三、学习AndEngine的重要性 1. **快速原型开发**:通过AndEngine,开发者可以快速构建游戏原型,测试创意。 2. **提高效率**:使用预封装的组件和模块,可以减少重复工作,专注于游戏内容的创新。 3. **跨设备兼容**...
AndEngine-GLES2是一款专为Android平台设计的开源2D游戏引擎,它为开发者提供了高效且易用的工具,用于创建各种2D游戏。这款引擎以其简洁的API和丰富的功能而受到开发者的欢迎,尤其值得一提的是,曾经风靡全球的...
AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **AndEngine基础** AndEngine的核心在于其强大的渲染引擎,它支持精灵(Sprites)、纹理(Textures)、纹理区域(Texture ...
#AndEngine准备使用骨架 ##来自Charles Smartt Jr.和Jordan Dickow ##摘要以下是andEngine和andEnginePhysicsBox2DExtension的可编译就绪源代码集,仅在Android Studio中使用。 JNI本机扩展已被编译并包含在内,而...
用andEngine最新的代码,然后用javadoc和easychm工具将它做成了chm格式的帮助文档,现在传到了上面,有需要的朋友可以下载
AndEngine-GLES2是一款专为Android平台设计的游戏开发框架,基于OpenGL ES 2.0图形库,提供了一套高效、易用的API,使得开发者能够快速构建2D游戏。源码的获取对于深入理解AndEngine的工作原理以及进行自定义扩展至...
AndEngine是一款针对Android平台开发2D游戏的开源引擎,它以简单易用和高效著称。这个Demo是AndEngine官方网站提供的示例集合,用于帮助开发者更好地理解和学习如何使用AndEngine来构建游戏。以下是对AndEngine及其...
AndEngine是一款专为Android平台设计的游戏开发框架,它提供了一个高效、易于使用的API,使得开发者可以快速构建2D游戏。这款开源引擎具有丰富的功能和模块,对于初学者和经验丰富的开发者来说,都是一个非常理想的...
通过学习和分析这些文件,你可以更深入地理解AndEngine的用法,包括如何组织代码结构、如何管理资源以及如何调试和优化游戏性能。 总之,AndEngine为Android游戏开发提供了一套强大的工具集。通过学习AndEngine游戏...
通过分析源代码和阅读教程,学习者可以掌握AndEngine的基本用法,例如设置场景、添加实体、实现物理行为、处理用户输入和更新游戏逻辑。 总的来说,这个压缩包文件提供了一个很好的机会,让对AndEngine感兴趣的...
【AndEngine-"河内塔"游戏源码】是一款基于AndEngine引擎开发的手机游戏,它实现了经典的"河内塔"(Towers of Hanoi)问题的互动式版本。AndEngine是一个开源的Android游戏开发框架,它允许开发者用Java语言创建2D...