需要为微调器创建一个线程?

时间:2013-04-14 09:01:59

标签: android multithreading progressdialog

我的代码在这里

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    progress = new ProgressDialog(this);
    progress.setTitle("Loading");
    progress.setMessage("Wait while loading...");
    progress.show();
    Log.i("Spinner", "Starts");
    String trip_id = trips.get(position);
    FeedParser parser = FeedParserFactory.getParser(ParserType.ANDROID_SAX);
    stopTimes = parser.parseStopTime().get(trip_id);
    Collections.sort(stopTimes,StopTime.StopTimeComparator);
    stops = parser.parseStop();
    List<String> stopList = new ArrayList<String>(stopTimes.size());
    for (StopTime st: stopTimes) {
        stopList.add(stops.get(st.getStop_id()).getStop_name() + st.getDeparture_time().toString());
    }
    Log.i("Spinner", "Dismissed");
//      progress.dismiss();
    Intent viewStops = new Intent(this, StopActivity.class);
    viewStops.putStringArrayListExtra("stops_to_parse", (ArrayList<String>) stopList);
    this.startActivity(viewStops);
}

单击列表时,我想显示一个微调器指示加载,同时程序加载其他东西,然后关闭它并转向另一个活动。

但它的作用是当你点击列表时,它只是加载东西,而不显示微调器,然后加载所有东西后,微调器突然闪烁然后转向另一个视图。

显然,程序正在忙于加载其他无法显示微调器的东西,直到它完成。

如何在程序正确计算其他内容时显示微调器?

2 个答案:

答案 0 :(得分:1)

发生的事情是您在主线程(UI线程)中进行耗时的工作(加载数据)。在加载数据时,界面被冻结,无法绘制或交互。

要解决此问题,您必须将耗时的任务移至另一个线程。为此,您可以使用AsyncTask或普通Java线程(如果您愿意)。

在主线程中:

  1. 显示微调器
  2. 开始新主题
  3. 在你的新主题中:

    1. 做好工作
    2. 隐藏微调器
    3. 您可以在线找到许多AsyncTask教程。

答案 1 :(得分:0)

您应该使用AsyncTask