我是 android 新手,我想为它创建简单的应用程序。这是它应该如何工作的:
- App 有 3 个活动:主要活动,创建玩家活动,连接拒绝活动。
- 主要活动显示玩家列表
- 创建玩家活动允许用户创建帐户
- 与服务器的连接中断时显示连接被拒绝活动
- 应用程序流程如下所示(“->”表示应用程序允许从一个活动转到另一个活动):
- 主->创建
- create->main(使用后退按钮)
- *->connection_refused->* :这个活动很特别,因为它会在与服务器的连接被拒绝时显示在顶部,因此它独立于其他活动,可以随时显示
- 应用程序中使用套接字连接
- 每个活动
observer
都会observable
在数据更改时收到通知,例如:- 用户已创建帐户:服务器将通知所有用户,某些用户已创建帐户,因此
main activity
需要更新玩家列表 - 由于某些问题,服务器已关闭:客户端每 5 秒检查一次连接,如果连接被拒绝,它将向
connection refused
活动发送通知。之后,信息活动应显示在其他(活动)活动之上。 - 最好的情况是
connection refused
活动一直存在,所以我可以随时显示/隐藏它
- 用户已创建帐户:服务器将通知所有用户,某些用户已创建帐户,因此
问题:
- 如何
connection refused
在其他(活动)活动之上显示活动?应用程序中的几乎所有内容都正常工作(连接被拒绝的活动被通知连接已被拒绝),但我不知道如何将其置于顶部。 - 活动对这个问题有好处还是我应该使用其他解决方案?
- 如果与服务器的连接被拒绝,则所有活动都应被阻止,
connection refused
活动应显示在顶部。用户不应该有可能回到被阻止的活动。
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();
}
}
}
});
}
}
- 示例用例:
- 用户处于主要活动中
- 用户想要创建新玩家,所以他去创建用户活动
- 用户想点击“创建用户”,但此时与服务器的连接被拒绝
connection refused activity
收到连接已被拒绝的通知,因此它显示信息“连接已被拒绝。您要重新连接吗?” 给用户- 用户单击“是的,我想重新连接”。此时服务器正在工作,因此应用程序尝试重新连接并隐藏
connection refused activity