的Android - 检测应用程序移动到背景和前景
如果申请去背景,5分钟后回来,我需要重新启动应用程序。 我们可以离开重启部分,我们将如何检测移动到背景和前景的应用程序?请帮忙。的Android - 检测应用程序移动到背景和前景
如果在其官方不可能或可能性的明细链接,请分享。
当它移动到后台时,它会执行onPause()
,并且当它恢复时,它确定onResume()
,请参阅活动生命周期。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
覆盖的onStop()在每个活动。当活动在后台进行时,将调用此方法。然后记下时间。
覆盖在onStart()。当活动从背景移动到前景时,这将被调用。然后记下这里的时间。
我认为你的意思是onResume()和onPause()。onStop()和onStart()用于完全关闭应用程序并在完全关闭时启动应用程序。 onResume()和onPause()在应用程序运行在/发送到后台时使用。按主页按钮会将其移动到背景('onPause()'),按返回按钮将关闭它('onStop()') – Andreas 2012-03-08 07:42:41
我有类似的问题,其中每一个应用程序从背景返回时间片段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 )。
比尔是正确的。太多人似乎并没有像“Android”那样“获得”Android应用程序的工作方式。这不是一个传统的计划。除非当前正在执行一段代码,否则您的应用程序不能被视为正在运行。任何其他时间它可能存在也可能不存在,并且Android将保存该状态,并且可能会或可能不会再次启动您的代码。活动生命周期是每个人都应该阅读10次或更多的事情,然后用所有的On [Whatever]事件编写测试应用程序来查看事件发生的时间。 – 2012-03-08 05:33:11
当您转到其他活动时,onPause()也会被触发。和onResume()当你返回到该活动。 – Andy 2012-03-27 07:48:49
onResume不能正常工作。我尝试过,有时在手机锁定时调用onResume。经过调查,我发现在文档中onResume的定义中,它表示: 请记住,onResume并不是您的活动对用户可见的最佳指标;系统窗口(如键盘)可能在前面。使用onWindowFocusChanged(布尔)肯定知道你的活动是对用户可见(例如,恢复游戏).http://developer.android.com/reference/android/app/Activity.html#onResume%28 %29 – 2013-04-09 15:56:57