Android应用程序从后台状态重新打开

时间:2012-05-31 09:04:47

标签: android

有没有办法确定应用程序是从头开始(即已经在内存中)还是从后台启动(已打开应用程序并点击home按钮)?< / p>

5 个答案:

答案 0 :(得分:3)

确保您了解Activity Lifecycle

Activity Lifecycle

答案 1 :(得分:2)

如果你的意思是Application而不是Activity,那么你应该创建一个派生自android.app.Application对象的类,并在manifest中声明这个类,以便能够通过重写方法监视它的生命周期。 每次应用程序从头开始创建此类型的一个对象时,因此如果您需要跨应用程序生命周期保存一些数据,则此对象或任何类型的单例都是这样做的好方法。

答案 2 :(得分:2)

如果您只是想知道APP何时从背景状态返回(当您返回主页或其他应用程序并再次返回应用程序时),这可能会对您有所帮助。 如果您发现不适用的情况,请告诉我。


public class FatherClass extends Activity {

      private static int activities = 0;

      public void onCreate(Bundle savedInstanceState, String clase) {
           super.onCreate(savedInstanceState);
      }

      protected void onRestart(){
           super.onRestart();
           if(activities == 0){
                 Log.i("APP","BACK FROM BACKGROUND");
           }
      }

      protected void onStop(){
           super.onStop();
           activities = activities - 1;
      }

      protected void onStart(){
           super.onStart();
           activities = activities + 1;
      }
}

你的所有活动都必须从这一活动延伸出来。

并且很简单,如果您的主要活动执行onCreate()(您想要的活动中的方法,而不是我的示例中的onCreate),并且您从未在另一个活动中调用它(将其视为启动画面)然后你从头开始,但如果你的活动执行onRestart()并且计数器“活动”值为0“零”,那么你将返回一个背景状态,我希望这可以帮助你,不要迟到另一个人。

答案 3 :(得分:0)

整个代码应该用app specefic super Activity

编写
        boolean isForeground = isInForeground(this);

        if ((!hasFocus) && (!isForeground)) {
            context.isBackground = true;
            Log.v("Alalytics", "Background...");
        }
        else if (context.isBackground) {
            context.isBackground = false;
            Log.v("Alalytics", "Forground...");
        }

然后...创建方法来检查应用程序是前景或背景的天气

/ **      *检查应用程序是否在前台      *      * @param上下文      * @return true,如果在前景中      ** /

private boolean isInForeground(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null) {
        return false;
    }
    final String packageName = context.getPackageName();
    for (RunningAppProcessInfo appProcess : appProcesses) {
        if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
                && appProcess.processName.equals(packageName)) {
            return true;
        }
    }
    return false;
}

答案 4 :(得分:0)

由于声誉不佳,我无法添加评论,因此我将为Reddy Raaz添加新答案: 这样您就需要其他权限,这可能会阻止某些用户安装该应用。 该框架仅在从头开始时才调用Application.onCreate方法。这样,您可以在没有其他许可的情况下可靠地获取信息。