我有玩游戏的活动。用户可能正在从保存状态恢复或启动新游戏。如果恢复,则要恢复的游戏的标识符将传递给捆绑中的活动。如果是新游戏,则不会传递该部分包,因此null
。我目前实现如下......
Bundle bundle = this.getIntent().getExtras();
int GameNumberToResume;
boolean StartNewGame = false;
try
{
GameNumberToResume = bundle.getInt("GameToResume");
}
catch (Exception e)
{
System.out.println("Exception Catch, so we start a new game.");
StartNewGame = true;
System.out.println((e.toString()));
}
......它有效。 StartNewGame
如果我们正在开始一个新决策树或恢复已保存的决策树,则驱动决策树,如果我们正在恢复,GameNumberToResume
将恢复游戏ID。但是,Android Studio会抛出软警告......
变量'GameNumberToResume'已分配但从未访问过。
...因为在我需要恢复游戏的价值时,在决策树的各个部分,我通过bundle.getInt("GameToResume")
从捆绑中直接拉出来。
所以这是我的问题:我应该做些什么?我可以通过引用变量GameNumberToResume
下游而不是从捆绑中拉出它来使警告消失,但在我看来,这似乎不会改变任何东西。警告的目的是指出我在浪费内存,如果我这样做,我仍然有两个范围内的东西都包含相同的值。
try
部分内移动声明,那么
在循环的System.gc();
部分之后触发catch
,
它会释放变量GameNumberToResume
使用的内容吗?我知道在这个特定的情况下它可能并不重要,但是它很简单,并且说明了我对如何有效编码Android的一般性漏洞。
答案 0 :(得分:3)
结帐
bundle.containsKey ("GameToResume");
它将返回该密钥是否存在于捆绑包中。
答案 1 :(得分:1)
请勿在此处使用try-catch
。您可以将游戏编号初始化为int GameNumberToResume=Integer.MAX_VALUE
。然后删除try-catch
。只需使用if(xx==Integer.MAX_VALUE)
。
在我看来,try-catch
只能用于未知错误或不可预测的情况。在这里,你知道一切。
答案 2 :(得分:1)
您可以使用getInt第二个参数来设置默认值,就像这样。
int