如果应用程序转到后台并在5分钟后返回,我需要重新启动应用程序。 我们可以离开重启部分,我们如何检测移动到背景和前景的应用程序?请帮忙。
如果有官方不可能或可能性的详细信息,请分享。
答案 0 :(得分:4)
当它移动到后台时它会onPause()
,当它恢复时它会onResume()
,请参阅活动生命周期。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
答案 1 :(得分:1)
在每个活动中覆盖 onStop()。当活动进入后台时,将调用此方法。然后记下时间。
覆盖 onStart()。当活动从背景移动到前景时,将调用此方法。然后记下这里的时间。
答案 2 :(得分: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.
}
}
作为旁注,将相同的逻辑应用于OnResume()的onStart()而不是会导致不必要的结果:
PerformMyAlgorithm在onResume()上再次自动接收 ,而不是用户选择通过单击FragmentA中的按钮(我的猜测)这是由于Android管理Fragment生命周期的方式。)
我不想要这个,因为从后台返回时(即onResume),FragmentB视图和计算被重置并重新显示/重新计算,而不是在将应用程序发送到后台之前立即向用户显示结果(即。的onPause)。