AsyncTask(异步进程)
我有关于异步任务的问题
来自android的Async
使用2个活动“A”和“B”
通过输入一个单词从URL搜索并在DTO中存储值,然后从getter和setter中获取值。
我的复杂性是我在我的活动“B”中实现了异步,并且该活动从同一个DTO获取值。
问题是,我的post知道在后台做的事情已经从DTO和DTO取得价值从互联网上取得价值……如果互联网连接速度慢的话。
我将意图从“A”发送到“B”并在“B”上显示结果
问题:
1.如果我删除异步,则应用程序显示黑页并冻结(仅在连接速度较慢的情况下)但显示数据
2.如果我使用aync,那么有时会显示进度对话框很长时间,并且知道数据已经在UI中显示
代码链接https://www.dropbox.com/s/p27rpokz68sryv3/SearchData.java
https://www.dropbox.com/s/rm3i52djiay327u/SearchData_DTO.java
https://www.dropbox.com/s/2hpufx2a12480on/Search.java
请建议我可能的解决方案
问候
你需要监听asyntask完整的监听器,为此让你的活动一个impliment接口并从Activity B调用该方法,s Asyntask,s onpostexecute方法这样你的活动A就会知道B已经完成了他的任务而你可以做下一步希望这会有所帮助
public interface AsyncTaskCompletedListener { public void OnResultSucceeded(String result); } public class LoginAsyncTask extends AsyncTask { AsyncTaskCompletedListener mAsyncTaskCompletedListener; @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub return null; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); mAsyncTaskCompletedListener.OnResultSucceeded(result); } }
这是接口Let Activity A impliment this和Activity从onpostexecute调用它
From Activity A LoginAsyncTask customloginasync = new LoginAsyncTask(getActivity(), FATCH_USER_LIST, arglist); customloginasync.execute(); customloginasync.setOnResultsListener(new AsyncTaskCompletedListener() { @Override public void OnResultSucceeded(String result, int asyncTaskNo) { Logger.logInfo("CustomLogin data=========" + result); ParseAvailableUserData(result); } });