嘿,伙计们, 我有个问题上取得进展对话打开的活动(被称为活动2例)。活动2有大量的代码,以执行在这OnCreate事件。

final ProgressDialog myProgressDialog = ProgressDialog.show(MyApp.this,getString(R.string.lstAppWait), getString(R.string.lstAppLoading), true);
new Thread() {
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                showApps();
            }
        });
        myProgressDialog.dismiss();
    }
}.start(); 

该showApps功能启动活动2.

如果我执行这个代码在我的按钮击事件对活动1中,我看到取得的进展,但她没有移动和afeter我有一个黑屏幕期间的2或3秒钟的时间安卓来显示的活动。

如果我执行这个代码在OnCreate的Activity2如果我代替showApps通过代码在OnCreate,Activity1冻2秒钟,我没有看到取得的进展对话,并再次冻结的2秒活动2之前看到的结果。

一个想法?

有帮助吗?

解决方案

我有同样的问题并使用 异步任务 正在为我工​​作。

AsyncTask 中有 3 个重要的方法需要重写。

  1. 后台操作 :这是您背景处理的肉。
  2. 预执行 :在这里显示您的 ProgressDialog ( showDialog )
  3. 执行后 :在此处隐藏您的ProgressDialog(删除或解雇)

如果将 AsyncTask 子类作为 Activity 的内部类,则可以从 AsyncActivity 中调用框架方法 showDialog、dismissDialog 和 removeDialog。

下面是 AsyncTask 的示例实现:

class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
  @Override
  protected Boolean doInBackground(String... params) {
    try {
      Thread.sleep(4000);  // Do your real work here
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return Boolean.TRUE;   // Return your real result here
  }
  @Override
  protected void onPreExecute() {
    showDialog(AUTHORIZING_DIALOG);
  }
  @Override
  protected void onPostExecute(Boolean result) {
    // result is the value returned from doInBackground
    removeDialog(AUTHORIZING_DIALOG);
    Intent i = new Intent(HelloAndroid.this, LandingActivity.class);
    startActivity(i);
  }
}

其他提示

据我所知,你不能与进度对话框中显示预装的任何活动。你是一个真正的设备或模拟器测试?

我见过的开业与在中心进度动画ViewFlipper的活动,并在接下来的视图,它被装一个活动的解决方法,但它不是建议和努力,你希望实施工作

GeeXor

我建议你要避免执行大量的业务活动2的OnCreate.写大量的行动OnCreate是一个原因,黑屏之间的活动。所以执行这些行动中使用异步 人际关 或螺纹(或把它们写在 不可或缺的训 如果他们是不可避免的).

其他的建议是要开始另一个progressDialog活动2的onCreate这将运行,直到所有你的数据加载和用户会知道,事情正在发生的背景。

这是我会怎么做。创建UI线程的处理程序,启动后台处理线程,然后显示progressdialog。当后台线程完成它的工作得到它通过处理后的UI线程上可运行到关闭对话框。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top