Java 活动-如何与他们合作?

Java 活动-如何与他们合作?,java,android,android-activity,Java,Android,Android Activity,我是android新手,我想为它创建一个简单的应用程序。这就是它的工作原理: 应用程序有3个活动:主活动、创建玩家活动、连接拒绝活动。 主要活动显示玩家列表 创建玩家活动允许用户创建帐户 当与服务器的连接中断时,将显示“连接被拒绝”活动 应用程序流如下所示(“->”表示应用程序允许从一个活动转到另一个活动): 主->创建 创建->主(使用后退按钮) *->连接被拒绝->*:此活动是特殊的,因为当与服务器的连接被拒绝时,它将显示在顶部,因此它独立于其他活动,可以随时显示 应用中使用了套接字

我是android新手,我想为它创建一个简单的应用程序。这就是它的工作原理:

  • 应用程序有3个活动:主活动、创建玩家活动、连接拒绝活动。
    • 主要活动显示玩家列表
    • 创建玩家活动允许用户创建帐户
    • 当与服务器的连接中断时,将显示“连接被拒绝”活动
  • 应用程序流如下所示(“->”表示应用程序允许从一个活动转到另一个活动):
    • 主->创建
    • 创建->主(使用后退按钮)
    • *->连接被拒绝->*:此活动是特殊的,因为当与服务器的连接被拒绝时,它将显示在顶部,因此它独立于其他活动,可以随时显示
  • 应用中使用了套接字连接
  • 每个活动都是
    观察者
    ,因此当数据更改时,
    可观察者
    会通知它,例如:
    • 用户已创建帐户:服务器将向所有用户发送通知,告知某些用户已创建帐户,因此需要更新
      主要活动中的玩家列表
    • 由于某些问题,服务器已关闭:客户端每5秒检查一次连接,如果连接被拒绝,它将向
      连接被拒绝
      活动发送通知。在此之后,信息活动应显示在其他(活动)活动的顶部
    • 最好的方法是,如果
      连接被拒绝
      活动将一直处于活动状态,因此我可以随时显示/隐藏它
  • 问题:

  • 如何在其他(活动)活动之上显示
    连接被拒绝
    活动?应用程序中的几乎所有东西都正常工作(连接被拒绝活动会被通知连接被拒绝),但我不知道如何将其置于首位
  • 活动是否有助于解决此问题,还是应该使用其他解决方案
  • 如果已拒绝与服务器的连接,则应阻止所有活动,并且顶部应显示
    拒绝连接的活动。用户不应该有可能返回到被阻止的活动
  • 连接拒绝活动:

    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();
                        }
                    }
                }
            });
        }
    }
    
  • 示例用例:
    • 用户处于主要活动中
    • 用户想要创建新玩家,所以他去创建用户活动
    • 用户希望单击“创建用户”,但此时拒绝与服务器的连接
    • 连接被拒绝活动
      被通知连接已被拒绝,因此它向用户显示信息“连接已被拒绝。是否要重新连接?”
    • 用户单击“是,我想重新连接”。此时服务器正在工作,所以应用程序尝试重新连接并隐藏
      连接被拒绝的活动

  • 这就是你能做的


    不要将
    连接拒绝活动
    作为观察者。你休息的2个活动应该是观察者。最好的方法是,保留一个实现Observer的BaseActivity。当通知观察者时,通过调用
    startActivityForResult
    打开
    connectionrefuedsactivity
    。当用户尝试重新连接时,将结果发送回以重新连接。在各自的活动中重新连接。

    您所说的“到达顶端”是什么意思?如果您开始一项活动,它将自动被带到顶部。。是否要带来一个已打开的拒绝活动?这意味着当与服务器的连接被拒绝时,该活动需要对用户可见。例如:用户正在从
    主活动
    移动到
    创建播放器活动
    ,当他想要创建新播放器时,与服务器的连接中断。此时将显示“连接被拒绝”活动,并通知用户该活动。清楚吗?什么代码正在监视与服务器的连接,比如说它是一项服务,您可以从中广播以启动活动。谢谢。我将试着用这种方式做。