【问题标题】:How to display view while doing a background process on android如何在android上执行后台进程时显示视图
【发布时间】:2012-05-09 11:40:34
【问题描述】:

我遇到了一个小问题,我不知道该怎么做。 我创建了一个应用程序,它通过 xml Web 服务提取信息。 数据被解析并插入到本地 sqlite 数据库中。 到目前为止一切正常。 由于数据的大小(根据提取的信息而有所不同),我打算插入一个带有进度条和微调器的加载屏幕,以通知用户采取了行动。 好吧,让我们这么说吧,它计划以这种方式工作。

我的问题是,一旦工作完成,它就会显示出来,而不是bevor。 这就是我的做法:

Handler phHandle = new Handler(){
        @Override
        public void handleMessage(Message msg){
            int progress = msg.arg1;
            pb.setProgress(progress);
        }
    };
    class firstInitHandler implements Runnable{
          private Handler phHandle;
          public void setHandle(Handler h){
              this.phHandle = h;
          }
          public void run(){
                try {
                    firstInit i = new firstInit();
                    i.doInit(this.phHandle);
                    if(i.isResult())
                    i.doParse();
                    if(i.isData()){
                        i.doTasks();
                        i.doEquipment();
                        i.doUser();
                        i.doCompany();
                        i.doForms();
                        i.doSysconfig();
                    }
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
          }
    }
    firstInitHandler h = new firstInitHandler();
    h.setHandle(phHandle);
    h.run();

这是方法的一部分。 到目前为止,它的工作原理。 处理信息的线程在 sdk 的任务管理器中可见。 我还可以看到在调试系统工作时在 logcat 上创建的状态消息。 但是屏幕保持空白,仅在任务完成后才显示。 我有点困惑,不知道从哪里开始让等待屏幕工作。

我欢迎任何帮助。

克里斯

【问题讨论】:

  • 启动画面会是您想要的吗?在正在进行的后台任务期间,您可以在屏幕上显示任何您想要的内容。

标签: android multithreading web-services view android-activity


【解决方案1】:

您可以使用 AsyncTask 使其顺利工作....

在您的活动中定义 AsyncTask ....

那么你可以通过这种方式从onclick或onCreate内部调用AsyncTask

new loading().execute();

AsyncTask 类如下。

  • 基本概念是初始化进度对话框 onPerExecute()。
  • 执行繁重的工作(非 UI),如解析和全部 DoInBackground()。
  • 然后在 onPostExecute() 中关闭对话框。

  • 您无法在 DoinBackGround 中更改 UI,但您可以这样做 在 OnPre / OnPostExecute() 中。

类如下。

 private class loading extends AsyncTask'<'String, Integer, Boolean>

{

ProgressDialog dialog ;
                @Override
                protected void onPostExecute(Boolean result) {
                    // TODO Auto-generated method stub
                    super.onPostExecute(result);
                    if(result==true) 
                    {  

                     dialog.dismiss();

                    }

                }

                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();

                   dialog = new ProgressDialog(current.this);
                            dialog.setMessage("Loading...");
                            dialog.show();

                }

                @Override
                protected void onProgressUpdate(Integer... values) {
                    // TODO Auto-generated method stub
                    super.onProgressUpdate(values);
                }

                @Override
                protected Boolean doInBackground(String... params) {
                    // TODO Auto-generated method stub

                    try {
                        firstInit i = new firstInit();
                        i.doInit(this.phHandle);
                        if(i.isResult())
                        i.doParse();
                        if(i.isData()){
                            i.doTasks();
                            i.doEquipment();
                            i.doUser();
                            i.doCompany();
                            i.doForms();
                            i.doSysconfig();
                        }
                    } catch (NullPointerException e) 
                       {
                        e.printStackTrace();
                        return false;
                        }
                     return true;


                }



            }   

【讨论】:

    【解决方案2】:

    您是否尝试过查看 Android 开发者资源?

    HereDialog tutorial。此页面上显示了一个进度对话框示例,或者您可以跳到特定的进度对话框部分,其中显示所有可能的命令、用法等。

    希望这是你需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2023-03-10
      • 1970-01-01
      • 2015-01-18
      相关资源
      最近更新 更多