我有个活动要玩游戏。用户可能正在从保存状态恢复或启动新游戏。如果继续,则将要继续的游戏的标识符传递给包中的活动。如果它是一个新游戏,那么包的这部分就不会被传递,因此是 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/catch循环中进行变量赋值的情况下检测包中是否存在“gametoresume”?
如果我把声明移到 try
循环的一部分,然后发射一个 System.gc();
之后 catch
循环的一部分,它会释放变量所使用的内容吗 GameNumberToResume
?
我知道在这个特定的例子中,这可能并不重要,但是它足够简单,并且说明了我在理解如何有效地编写android代码方面的一个普遍漏洞。
3条答案
按热度按时间yi0zb3m41#
结帐
它将返回此密钥是否在包中。
7fyelxc52#
不要使用
try-catch
在这里。你可以初始化游戏号码int GameNumberToResume=Integer.MAX_VALUE
. 然后拆下try-catch
. 只是使用if(xx==Integer.MAX_VALUE)
.在我看来,
try-catch
只能用于未知错误或不可预知的情况。在这里,你什么都知道。mspsb9vt3#
您可以使用getint第二个参数来放置默认值,如下所示。