在Android上保持活动活跃并正常退出

时间:2012-01-16 20:47:49

标签: android android-intent android-activity

我有一个有两个活动的应用程序,我们称之为A和B.A是初始Activity,B是第二个Activity。一旦B启动,我不希望在应用程序停止运行之前销毁活动,因为B设置了外部网络连接。

我想要的是让人们进入A的活动,按下小部件,然后转到B,即A - > B.如果他们按下B上的后退按钮,我不希望B被摧毁。我不关心是否重新创建A,但默认情况下不是。当前活动现在是A,如果人们按下小部件转到B,我希望他们通过开放网络连接重新输入现有的B活动。如果他们再次按下,我希望他们去参加A活动。现在在A中,如果他们按下,我希望应用程序中的所有活动都关闭。

我已经在B中创建一个onBackPressed()方法了(因此在转到A时不会破坏B活动)。此外,将Intent标志“FLAG_ACTIVITY_REORDER_TO_FRONT”添加到调用B的A中的意图会阻止B在我第二次从A调用时重新创建,尽管这可能不是最好的方法。

重申我的所作所为:

  1. 在活动A输入申请。
  2. 在A中按小部件,打开活动B.
  3. 按B中的后退按钮打开活动A.这不应该关闭B,而是将其放在堆栈上。
  4. 再次在A.我按下小部件B.这应该打开现有的B活动。
  5. 现在在B我按回到A。
  6. 在A中按返回退出应用程序。
  7. 程序流程是[主屏幕] - >活动A - >活动B.后退键将反转此流程。

2 个答案:

答案 0 :(得分:2)

而不是试图保持活动B存活,而不是依靠活动来保持网络连接的活跃。有几种方法可以解决此问题,包括使用Service和管理自定义Application类的连接。有关更多信息,请参阅我对其他帖子的回答:How to maintain Server Socket through Activities?

答案 1 :(得分:1)

每当活动从屏幕上消失时,无法保证它不会被操作系统杀死。这意味着两件事。您希望坚持的任何视觉状态都必须跟踪自己。您可以使用onSaveInstanceStateonRestoreInstanceState执行此操作。

您提到要在可能脱离屏幕的活动中打开网络连接。您应该考虑在Service中执行此操作。服务非常类似于活动,除非它们被设计为在屏幕外工作。它们非常适合做一些不需要用户交互的事情。

关于始终在两个活动之间切换后退按钮,您可以通过拦截活动中的后退按钮然后让应用切换活动来执行此操作。但请记住,后退按钮在Android上有一个非常特殊的功能,用户习惯于以某种方式行事。尽量不做面对android UX约定的任何事情。我个人觉得当应用程序违反惯例时会感到沮丧,例如使用后退按钮退出活动并返回主屏幕。