繁体   English   中英

如何从任何一点退出应用程序。

[英]How to back out of Application from any point.

我有一个访问服务器的应用程序。 我有许多活动访问服务器以获取数据。 在应用程序的不同点,我做了一个简单的检查,以验证两件事,1)有互联网连接和2)服务器不处于维护模式或关闭..如果是,我显示一个活动详细说明为什么和何时服务器将备份。

当用户单击此“服务器已关闭”活动时,我需要退出该应用程序。 我尝试了以下代码/意图调用“服务器关闭”活动,但它不起作用。

Intent i = new Intent(this, ServerMaintenanceActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

我看了一遍,这是一个非常普遍的问题,通常在登录/注销屏幕上。 我发现的解决方案都不适用于我。 我知道这是可能的,因为我有这样的应用程序,例如Spotify。

有任何想法吗? 谢谢。

无论何时启动活动,都可以创建新的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(); } 

在启动ServerMaintenanceActivity之前,请完成当前的操作,因此当您按Back时,它应该从堆栈中删除。

//...
startActivity(i);
finish();

删除Intent.FLAG_ACTIVITY_NEW_TASK。 如果您使用NEW_TASK标志启动新活动,则会启动新任务。 您不希望新任务,您想要清除所有当前任务活动堆栈。 所以删除FLAG_ACTIVITY_NEW_TASK。 PS以这种方式关闭所有活动并不是最好的解决方案,ResultReceiver更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM