Android - 检测移动到背景和前景的应用程序

时间:2012-03-08 04:13:59

标签: java android

如果应用程序转到后台并在5分钟后返回,我需要重新启动应用程序。 我们可以离开重启部分,我们如何检测移动到背景和前景的应用程序?请帮忙。

如果有官方不可能或可能性的详细信息,请分享。

3 个答案:

答案 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)。