当前位置:首页 > 安卓源码 > 技术博客 >

在Android中加载两个或更多异步任务时创建进度条

时间:2018-12-23 19:50 来源:互联网 作者:源码搜藏 浏览: 收藏 挑错 推荐 打印

在我们需要创建多个异步任务的情况下,例如当一个活动需要创建多个循环视图(或片段)时,我们可以重用相同的旋转进度条小部件,直到完成所有异步任务。 异步调用可用于通过网络或数据库加载数据或更平滑的长时间运行任务。 由于异步任务发生在后台线程中,

在我们需要创建多个异步任务的情况下,例如当一个活动需要创建多个循环视图(或片段)时,我们可以重用相同的旋转进度条小部件,直到完成所有异步任务。异步调用可用于通过网络或数据库加载数据或更平滑的长时间运行任务。由于异步任务发生在后台线程中,尝试从主线程启动微调器并从后台线程关闭微调器会导致类型“ CalledFromWrongThreadException”的异常,这意味着只有创建视图层次结构的原始线程才能触及它观点。

这可以通过创建两个变量来完成,一个用于存储请求的数量,另一个用于存储已完成的请求数。假设异步任务是调用类的内部类。在调用异步任务之前,请求的数量会增加。并且完成的请求数增加onPostExecuteasync类的功能进度条在调用类中初始化。进度条的可见性设置为visibleasync课程开始时onPost执行后隐藏进度条的可见性,并且仅当请求数等于已完成的请求数时。简单!

下面,我概述了一些主要步骤。我希望我能扩展这篇文章,以便在将来使用完整的工作代码添加更多细节。

我定义了两个private变量来计算调用异步任务的活动中的异步任务。一个计数器跟踪已经请求的任务,另一个是已完成的数量。

private int AsyncTaskCount = 0;     //tracks number of requests completed
private int AsyncTaskRequested = 0; //tracks number of requests
private ProgressBar spinner;        //defined the progressBar

初始化onCreate调用类的方法的进度条。 

spinner = (ProgressBar)findViewById(R.id.progressbar);

在调用之前更新请求的发言数asynctask

AsyncTaskRequested = 2;     //we are requesting two asynctasks
new NetworkQueryTask().execute(SmartStockConstant.QueryMarket);
new NetworkQueryTask().execute(SmartStockConstant.QueryStock);

asynctask班级中,更新AsyncTaskCountdoInBackground,并设置进度条visible

class NetworkQueryTask extends AsyncTask<String, Void, ArrayList<Stock>> {
     private String query;

     @Override 
     protected ArrayList<Stock> doInBackground(String... params) { 
          AsyncTaskCount++; //track the executed 
          spinner.setVisibility(View.VISIBLE); //set the bar visible

最后,onPostExecute检查已完成任务的数量是否等于请求的数量并使其progressBar不可见:

     @Override 
     protected void onPostExecute(ArrayList<Stock> searchResults) { 
          super.onPostExecute(searchResults); 
          //main logic here 

          if(AsyncTaskCount == AsyncTaskRequested) { 
               spinner.setVisibility(View.GONE); 
         } 
    }
}
在Android中加载两个或更多异步任务时创建进度条 转载https://www.codesocang.com/appboke/39181.html

技术博客阅读排行

最新文章