Android - 如何正确处理onPause / onResume方法?

时间:2010-04-22 14:13:35

标签: android session-state state

我有一个应用程序,它开始播放声音,并在onResume()方法中开始/恢复游戏,但我注意到的是,如果我的应用程序是最后一次运行的应用程序,当我将手机置于待机状态(屏幕关闭) ,我只需按菜单按钮查看时间,然后手机开始播放游戏并在后台发声(应用程序实际上看不到,只有带日期/时间的屏幕,但是onResume必须被调用在我的应用程序)。我该怎么办?有没有办法辨别什么是重新激活应用程序,然后添加条件语句只在应用程序实际可见时启动游戏?

这是我onResume的一个片段:

@Override
    protected void onResume()
    {
        mySaveGame = Utilities.loadSavegame(this);

        //check the savegame
        if(mySaveGame!=null)
        {
            //start game using savegame values
            this.startFromSavedGame(mySaveGame.getIsLevelComplete());   
        }
        else
        {
            //run the 1st-run components
            this.startFirstRun();
        }

        super.onResume();
    }

我唯一想到的就是防止游戏在屏幕开启时启动(即使应用程序不可见),也就是将this.finish()作为onPause()的最后一行。 ..但是每次你想要回到它时都会强制你重启应用程序,因为进程本身被杀死了(这很好,因为我的onPause保存了持久数据,但它不是一个优雅的解决方案)。

请帮忙。

2 个答案:

答案 0 :(得分:8)

您是否考虑过切换到onStart()onStop(),而不是onResume()onPause()

答案 1 :(得分:4)

我遇到了同样的问题(我的音乐播放器恢复/暂停在onResume()/onPause()),我找到的最佳解决方案是暂停和恢复活动,当它位于前景时你可以使用{ {3}}回调。

编辑:这是一个陈旧且略微不正确的答案 - Android开发者博客中描述了正确的答案:public void onWindowFocusChanged (boolean hasFocus)