2012-03-01 84 views
0

我有两个叫做Client1.java和Client2.java的活动。同步进度对话框android

Client1与远程主机建立tcp/ip连接以运行命令。然后服务器将输出发送回Client1。输出将显示在Client2 Activity中。由于需要一些时间将输出发送回来自远程服务器的Client1活动,我使用了一个progreesDialog来显示一些进度,直到输出完全从服务器发送回Client1活动。

我需要一些同步,只要输出将完全发送回Client1活动progressDialog将完成,Client2将开始显示从远程服务器接收到的输出。

回答

0

AsyncTask是实现异步线程的概念,在Android中被称为Painless threading,因为如果你实现这个,那么你就不需要为线程管理而烦恼。

现在,您只需要在特定方法内编写逻辑。

例如:

  1. onPreExecute() - 在这里你显示进度对话框。

  2. doInBackground() - 在需要编写长时间运行任务的地方,远程调用逻辑会转到此处。

  3. onPostExecute() - 您需要编写用于启动Client2活动的代码并关闭对话框。

0

帕雷什是对的!看一个例子...

private class SessionTask extends AsyncTask<String, Integer, Integer> { 

    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog = new ProgressDialog(TestUI.this); 
     dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     dialog.setTitle("UploadFile"); 
     dialog.setMessage("Uploading file..."); 
     dialog.setCancelable(false); 
     dialog.setProgress(0); 
     dialog.show(); 
    } 

    @Override 
    protected Integer doInBackground(String... params) { 
     ......... 
     } catch(MalformedURLException e) { 
      Log.e(TestUI.TAG, "E: Malformed URL! " + e.getLocalizedMessage()); 

      return 1; 
     } catch(IOException e) { 
      Log.e(TestUI.TAG, "E: I/O error! " + e.getLocalizedMessage()); 
     return 2; 
     } 
     return 0; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     dialog.setMax(values[1]); 
     dialog.setProgress(values[0]); 

    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     dialog.dismiss(); 
     switch (result) { 
     case 0: 
      Toast.makeText(TestUI.this, "Uploading finished", Toast.LENGTH_LONG).show(); 

      new DownloadTask().execute(new String[] {TestUI.LINK_DOWN, TestUI.FILE_DOWN}); 
      break; 
     case 1: 
      Toast.makeText(TestUI.this, "E: Malformed URL!", Toast.LENGTH_LONG).show(); 
      break; 
     case 2: 
      Toast.makeText(TestUI.this, "E: I/O error! Connection was dismissed!!!", Toast.LENGTH_LONG).show(); 

      break; 
     } 
    } 
}