Android 安卓锁屏行为

Android 安卓锁屏行为,android,oncreate,lockscreen,Android,Oncreate,Lockscreen,如果我按home键,稍晚一点再回到我的应用程序,我会发现状态被完美地保留了下来。然而,由于某种原因,如果我锁定手机,然后解锁,我的应用程序已经返回到原来的状态栏,这里和那里有一些东西。当我查看日志时,我发现onCreate在手机处于锁定状态时被调用。因为锁定手机是一件非常简单的事情,所以每次重置游戏时用户都不希望重置游戏。如何在锁定手机后至少在超过几秒钟的时间内避免这种情况?如果您的日志显示onCreate已被调用,则表示您的应用程序进程已被终止 你知道Android的活动生命周期吗?如果没有,

如果我按home键,稍晚一点再回到我的应用程序,我会发现状态被完美地保留了下来。然而,由于某种原因,如果我锁定手机,然后解锁,我的应用程序已经返回到原来的状态栏,这里和那里有一些东西。当我查看日志时,我发现onCreate在手机处于锁定状态时被调用。因为锁定手机是一件非常简单的事情,所以每次重置游戏时用户都不希望重置游戏。如何在锁定手机后至少在超过几秒钟的时间内避免这种情况?

如果您的日志显示onCreate已被调用,则表示您的应用程序进程已被终止


你知道Android的活动生命周期吗?如果没有,请在此处阅读:

如果您的日志显示onCreate已被调用,则表示您的应用程序进程已被终止


你知道Android的活动生命周期吗?如果没有,请在此阅读:

这是Android操作系统的工作原理,它决定何时破坏您的视图。为了避免丢失这些信息,有一种方法可以在您的活动中重新实现

@Override
public void onSaveInstanceState(Bundle outState){
    iGameContent.saveGame(outState);
}
将所有需要的数据保存到outState中,并在onCreate方法中,检查它是新实例还是已保存实例,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    if (savedInstanceState!=null){
        iGameContent.loadGame(savedInstanceState);
    }else{
        // Normal initialization
    }
}
保存/加载到捆绑包的示例如下:

public void loadGame(Bundle aBundle){
    iBadsHit = aBundle.getInt("iBadsHits",0);
}

public void saveGame(Bundle aBundle){
aBundle.putInt("iBadsHit", iBadsHit);
}

这就是安卓操作系统的工作原理,它由自己决定何时破坏您的视图。为了避免丢失这些信息,有一种方法可以在您的活动中重新实现

@Override
public void onSaveInstanceState(Bundle outState){
    iGameContent.saveGame(outState);
}
将所有需要的数据保存到outState中,并在onCreate方法中,检查它是新实例还是已保存实例,如下所示:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    if (savedInstanceState!=null){
        iGameContent.loadGame(savedInstanceState);
    }else{
        // Normal initialization
    }
}
保存/加载到捆绑包的示例如下:

public void loadGame(Bundle aBundle){
    iBadsHit = aBundle.getInt("iBadsHits",0);
}

public void saveGame(Bundle aBundle){
aBundle.putInt("iBadsHit", iBadsHit);
}

屏幕锁定的行为可能因设备而异。某些事件可能导致应用程序被破坏。您可以尝试处理其中一些事件,以避免在AndroidManifest.xml上指定它时出现这种情况:

android:configChanges="keyboardHidden|orientation"

这两个是最有问题的屏幕锁。您可以在本书的最后一章找到更多信息,屏幕锁定的行为可能因设备而异。某些事件可能导致应用程序被破坏。您可以尝试处理其中一些事件,以避免在AndroidManifest.xml上指定它时出现这种情况:

android:configChanges="keyboardHidden|orientation"


这两个是最有问题的屏幕锁。你可以找到更多关于这篇文章最后一章的信息

是的,我想是的,但是我有点困惑,为什么手机总是在锁屏上终止我的进程,而不是(这么多)在手机还被用于其他事情的时候。此外,启动屏幕不会再次显示,因此进程不可能被完全终止。此外,奇怪的是,您可以按home键,然后锁定,状态将得到完美保留。因此,它没有被终止。我猜你的游戏是横向的,对吧?如果是这样的话,您只需要按照我的答案中的链接所描述的方式保持游戏状态。如果你不想让用户在下次启动游戏时按Home键重新启动游戏,那么你应该这样做。哦,强制进行纵向定向是否会拖累整个过程?定向更改会导致再次创建活动。是的,我猜是这样的,但我有点困惑,为什么手机总是在锁屏上终止我的进程,而不是(这么多)在手机仍被用于其他事情的时候。此外,启动屏幕不会再次显示,因此进程不可能被完全终止。此外,奇怪的是,您可以按home键,然后锁定,状态将得到完美保留。因此,它没有被终止。我猜你的游戏是横向的,对吧?如果是这样的话,您只需要按照我的答案中的链接所描述的方式保持游戏状态。如果你不想让用户在下次启动游戏时按Home键重新启动游戏,那么无论如何你都应该这样做。哦,强制进行纵向定向会影响整个过程吗?定向更改会导致再次创建活动。我们是说长期保存(例如:高分)还是短期保存(例如:最后一关玩)?不,短期的。如果关闭应用程序,捆绑包将被清除。在savedinstancestate上,系统似乎没有终止应用程序,只需将类的所有变量写入此捆绑包,当来自后台或更改方向时,它将被还原。但不是在游戏开始的时候,或者在使用SharedReferences类完成一个关卡的时候,我们谈论的是长期保存(例如:高分)还是短期保存(例如:最后一个关卡)?不,是短期保存。如果关闭应用程序,捆绑包将被清除。在savedinstancestate上,系统似乎没有终止应用程序,只需将类的所有变量写入此捆绑包,当来自后台或更改方向时,它将被还原。但不是在游戏开始时,或者在使用SharedPreferences类完成关卡时,应该保存applong term的内容