我拉取了大约 1500 个数据图并将它们添加到 map View 的叠加层中。我想在我的程序的其余部分完成启动时在另一个线程中运行它。我希望进度微调器在加载数据绘图点时仅在 map 部分旋转。
我已经搜索并找到了我需要的东西,但我不确定如何实现它以及将它放在我的代码中的什么位置。
- 我会在参数中放什么
- 这是在另一个类中还是在我的主要 oncreate 方法中。
我什么时候调用这些方法?
private class UpdateFeedTask extends AsyncTask<MyActivity, Void, Void> { private ProgressDialog mDialog; protected void onPreExecute() { Log.d(TAG, " pre execute async"); mDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true); } protected void onProgressUpdate(Void... progress) { Log.d(TAG, " progress async"); } @Override protected Void doInBackground(MyActivity... params) { // TODO Auto-generated method stub return null; } protected void onPostExecute(Void result) { Log.d(TAG, " post execute async"); mDialog.dismiss(); } }
最佳答案
从你的问题来看,我实际上不能百分百确定你目前对 AsyncTask
的理解,所以这可能是你已经知道的一些东西,但请耐心等待。
“这是在另一个任务中还是在我的 onCreate 方法中?”:
AsyncTask
是一个类,您应该对其进行子类化以执行您需要的操作,它不是一段可以内联到您的 onCreate
中的代码。您可以在 onCreate 中创建一个匿名的 AsyncTask
类,但通常您希望它作为私有(private)内部类或完全属于自己的类。
至于何时调用方法;你不知道它们是生命周期事件。
onPreExecute()
在开始后台工作之前在 UI 线程上被调用,并且是执行修改组件以显示进度或弹出对话框等操作的地方。
doInBackground(Params...)
是在另一个线程的后台运行的主要方法,在这里做你的工作。 不要尝试在此处修改 UI
onPostExecute(Result) 是当您的任务完成并再次在 UI 线程上运行时。这是您应该处理 UI 更新的地方。
您只需调用 execute(Params..)
,它将启动 AsyncTask
,将您作为参数放入的对象传递到 doInBackground(Params. ..)
任务的方法。因此,关于将什么作为参数放入的答案是您需要在 doInBackground(Params...)
中访问的任何内容。
这应该是满足您需求的一个不错的概述,但您真的应该查看 the docs .
关于java - 如何让异步在后台运行线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6670833/