2012-03-08 92 views
2

如果申请去背景,5分钟后回来,我需要重新启动应用程序。 我们可以离开重启部分,我们将如何检测移动到背景和前景的应用程序?请帮忙。的Android - 检测应用程序移动到背景和前景

如果在其官方不可能或可能性的明细链接,请分享。

回答

4

当它移动到后台时,它会执行onPause(),并且当它恢复时,它确定onResume(),请参阅活动生命周期。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

+0

比尔是正确的。太多人似乎并没有像“Android”那样“获得”Android应用程序的工作方式。这不是一个传统的计划。除非当前正在执行一段代码,否则您的应用程序不能被视为正在运行。任何其他时间它可能存在也可能不存在,并且Android将保存该状态,并且可能会或可能不会再次启动您的代码。活动生命周期是每个人都应该阅读10次或更多的事情,然后用所有的On [Whatever]事件编写测试应用程序来查看事件发生的时间。 – 2012-03-08 05:33:11

+8

当您转到其他活动时,onPause()也会被触发。和onResume()当你返回到该活动。 – Andy 2012-03-27 07:48:49

+1

onResume不能正常工作。我尝试过,有时在手机锁定时调用onResume。经过调查,我发现在文档中onResume的定义中,它表示: 请记住,onResume并不是您的活动对用户可见的最佳指标;系统窗口(如键盘)可能在前面。使用onWindowFocusChanged(布尔)肯定知道你的活动是对用户可见(例如,恢复游戏).http://developer.android.com/reference/android/app/Activity.html#onResume%28 %29 – 2013-04-09 15:56:57

1

覆盖的onStop()在每个活动。当活动在后台进行时,将调用此方法。然后记下时间。

覆盖在onStart()。当活动从背景移动到前景时,这将被调用。然后记下这里的时间。

+1

我认为你的意思是onResume()和onPause()。onStop()和onStart()用于完全关闭应用程序并在完全关闭时启动应用程序。 onResume()和onPause()在应用程序运行在/发送到后台时使用。按主页按钮会将其移动到背景('onPause()'),按返回按钮将关闭它('onStop()') – Andreas 2012-03-08 07:42:41

1

我有类似的问题,其中每一个应用程序从背景返回时间片段B保持基于从片段A在活动(其中片段A基于用户输入将数据发送到片段B)的输出重新计算结果。以下解决方案使用简单的布尔检查并应该适用于大多数目的。这使我可以在离开应用程序很长一段时间后保留旧的FragmentB结果(假设FragmentB中的结果不像内存饥饿以至于Android在一段时间后清除它们)。

//Code from Fragment B 
public class FragmentB extends Fragment { 
    Boolean app_was_in_background; 
    @Override public void onPause() { 
     super.onPause(); 
     app_was_in_background = true; 
    } 
    @Override public void onResume() { 
     super.onResume(); 
     if (getArguments() != null) { 
      String output_to_FragmentB = getArguments().getString("input_from_FragmentA"); 

      if (app_was_in_background == null || !app_was_in_background) { 
       app_was_in_background = false; 

       PerformMyAlgorithm(output_to_FragmentB); 
      } 
     } 
    } 
    public void PerformMyAlgorithm(String input) { 
     //Code that includes Spinners and calculations, where I want to app 
     //to return to the user's chosen spinner location and display 
     //results as the user saw them before switching to another app 
     //on the device. All this without explicitly "saving" the Spinner 
     //position and data in memory. 
    } 
} 

作为边注,应用相同的逻辑来在onStart()的onResume(代替)可导致不希望的结果:

PerformMyAlgorithm接收FragmentA输出再次(即字符串output_to_FragmentB。)在的onResume()自动没有用户选择到如此通过单击FragmentA一个按钮(我的猜测是,这是由于Android的方式管理片段的生命周期)。

我不希望这样做,因为当从后台返回(即onResume)时,FragmentB视图和计算被重置并重新显示/重新计算,而不是立即向应用程序发送背景之前向用户显示结果(即onPause )。