我有一个访问服务器的应用程序。我有许多活动访问服务器以获取数据。在应用程序的不同点,我做了一个简单的检查,以验证两件事,1)有互联网连接和2)服务器不处于维护模式或关闭..如果是,我显示一个活动详细说明为什么和何时服务器将备份。
当用户点击此“服务器已关闭”活动时,我需要退出该应用程序。我尝试了以下代码/意图来调用“服务器关闭”活动,但它不起作用。
Intent i = new Intent(this, ServerMaintenanceActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
我已经看了一遍,这是人们通常在登录/退出屏幕上遇到的一个非常常见的问题。我发现的解决方案都不适用于我。我知道这是可能的,因为我有这样的应用程序,例如Spotify。
有什么想法吗?谢谢。
答案 0 :(得分:2)
每当您启动活动时,您都可以创建新的ResultReceiver
,然后将其放入全局帮助程序类的列表中。然后,在您的通知活动中(告诉用户“服务器已关闭”),覆盖onDestroy()
并发送请求以完成其他操作。
例如:
Helper
上课:
public static final int REQUEST_FINISH = 1;
private static final List<ResultReceiver> mClients = new ArrayList<ResultReceiver>();
public static void registerClient(ResultReceiver receiver) {
mClients.add(receiver);
}
public static void unregisterClient(ResultReceiver receiver) {
mClients.remove(receiver);
}
public static void finishApp() {
for (ResultReceiver client : mClients)
client.send(REQUEST_FINISH, null);
}
其他活动:
private ResultReceiver mCommandHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
mCommandHandler = new ResultReceiver(null) {
@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
if (resultCode == Helper.REQUEST_FINISH) {
// do some other stuffs...
finish();
}
}
};
Helper.registerClient(mCommandHandler);
}// onCreate()
@Override
protected void onDestroy() {
super.onDestroy();
Helper.unregisterClient(mCommandHandler);
}
通知活动:
@Override
protected void onDestroy() {
super.onDestroy();
Helper.finishApp();
}
答案 1 :(得分:0)
在开始ServerMaintenanceActivity
之前,请完成当前的操作,因此当您按下后退时,应将其从堆栈中删除。
//...
startActivity(i);
finish();
答案 2 :(得分:0)
删除Intent.FLAG_ACTIVITY_NEW_TASK。如果您使用NEW_TASK标志启动新活动,则会启动新任务。您不希望新任务,您想要清除所有当前任务活动堆栈。所以删除FLAG_ACTIVITY_NEW_TASK。 附:以这种方式关闭所有活动并不是最好的解决方案,ResultReceiver更好。