活动 - 如何与他们合作?

时间:2013-06-02 17:33:44

标签: java android android-activity

我是android的新手,我想为它创建简单的应用程序。这是它应该如何工作:

  1. App有3项活动:主要活动,创建玩家活动,连接拒绝活动。
    • 主要活动显示玩家列表
    • 创建玩家活动允许用户创建帐户
    • 与服务器的连接中断时显示连接被拒绝活动
  2. 应用流程看起来像这样(“ - >”表示应用程序允许从一个活动转到另一个活动):
    • main->创建
    • create-> main(使用后退按钮)
    • * - > connection_refused-> *:此活动很特殊,因为当与服务器的连接被拒绝时它将显示在顶部,因此它独立于其他活动并且可以随时显示
  3. 在应用程序中使用套接字连接
  4. 每项活动均为observer,因此当数据发生变化时,observable会通知该活动,例如:
    • 用户已创建帐户:服务器将向某些用户创建帐户的所有用户发送通知,以便main activity中的玩家列表需要更新
    • 由于某些问题,
    • 服务器已关闭:客户端每隔5秒检查一次连接,如果连接被拒绝,它将向connection refused活动发送通知。之后,信息活动应显示在其他(活动)活动之上。
    • 如果connection refused活动一直存在,那将是最好的,所以我可以随时显示/隐藏它
  5. 问题:

    1. 如何在其他(有效)活动之上展示connection refused活动?应用程序中的几乎所有内容都能正常工作(连接拒绝活动会被通知连接已被拒绝)但我不知道如何将其置于最佳状态。
    2. 活动是否适用于此问题,还是应该使用其他解决方案?
    3. 如果拒绝与服务器的连接,则应阻止所有活动,并且应在顶部显示connection refused活动。用户不应该有可能回到被阻止的活动。
    4. ConnectionRefusedActivity:

      public class ConnectionRefusedActivity extends Activity implements Observer {
      
          private ServerService service;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              service = ServerService.getInstance();
              service.addObserver(this);
      
              progressDialog = new ProgressDialog(this);
              alertDialog = new AlertDialog.Builder(this).create();
              alertDialog.setMessage("Unable to connect to server. Click OK to reconnect.");
              alertDialog.setButton("OK", new OnClickListener() {
                  @Override
                  public void onClick(DialogInterface dialog, int which) {
                      service.connect();
                  }
              });
              progressDialog.setMessage("Please wait...");
              // this method tries to connect to server; if it fails `service` will sernd notification to this activity with data `false`
              service.connect();
          }
      
          @Override
          public void update(final Observable observable, final Object data) {
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      if (observable instanceof ServerService) {
                          boolean isConnected = (Boolean) data;
                          if (isConnected) {
                              progressDialog.dismiss();
                              alertDialog.dismiss();
                          }
                          else {
                              // this will be called if connection with server has been refused; the problem is that I don't know how to bring this activity to top
                              // ATTENTION! I want to bring this activity to top here
                              progressDialog.show();
                              alertDialog.show();
                          }
                      }
                  }
              });
          }
      }
      
      1. 示例用例:
        • 用户处于主要活动
        • 用户想创建新播放器,以便创建用户活动
        • 用户想要点击“创建用户”,但此时与服务器的连接被拒绝
        • connection refused activity被通知连接已被拒绝,因此它显示信息“连接已被拒绝。您要重新连接吗?”给用户
        • 用户点击“是的,我想重新连接”。此时服务器正在运行,因此应用程序尝试重新连接并隐藏connection refused activity

1 个答案:

答案 0 :(得分:1)

这是你可以做的,

不要让ConnectionRefusedActivity作为观察者。你休息2活动应该是观察者。最好的方法是,保留一个实现Observer的BaseActivity。观察员通知后,请致电ConnectionRefusedActivity打开startActivityForResult。当用户尝试重新连接时,将结果发回以重新连接。在相应的活动中再次重新连接。