早在一月份的时候,在网上down了一份飞机大战的源码,但是有一个问题就是每次退出游戏界面再进入的时候,会产生一个bug:自己的飞机变成两个了。
在当时因为学识所限,在网上查了很久也没能找到解决办法。在三月初重新开始学习Android以后,终于在今天找到了解决办法。
首先是一个参考网页:https://blog.csdn.net/shantan/article/details/47056821
网页的内容是:四种结束当前activity的方法。但是经过实际操作之后,具体结果在下面给出:
(代码部分是将飞机大战的游戏场景布局在一个RelativeLayout之中,这个布局被我嵌套在另一个布局之中,以便于将一个退出游戏的按钮显示出来)
(一直以来的bug是这样的:①无法在游戏界面显示一个退出按钮(查阅了好多人的博客以及百度之后依然没能找到解决办法,可能是我学的太少了)②退出后再进入,就会出现两架自己的飞机(这个或许是因为没有结束当前的activity导致的重复定义对象吧))
(第一个bug通过以下代码解决:其中hua.java是游戏的界面的代码,所以在此处定义的时候使用hua。
final hua hh=new hua(this);
RelativeLayout relativeLayout=findViewById(R.id.rl);
relativeLayout.addView(hh);
)
(第二个bug的解决就是通过上面提到的网页解决的,但是我通过网上搜索一些资料,发现finish()这个方法似乎有些弊端,但我学识较浅,不太理解,详情请见:https://bbs.csdn.net/topics/392308495)
【下面是第二个bug的实际操作过程:】
第一种:finish();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_battle);
final hua hh=new hua(this);
RelativeLayout relativeLayout=findViewById(R.id.rl);
relativeLayout.addView(hh);
Button button=findViewById(R.id.btn_battle);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(BattleActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
});
}
//禁用手机返回键
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK ) {
//do something.
return true;
}else {
return super.dispatchKeyEvent(event);
}
}
结果视图:【分别是:主界面,第一次打开游戏界面,点击返回后返回到的主界面,第二次打开游戏界面】
通过实例可以清晰的看出结果:
Intent intent=new Intent(BattleActivity.this,MainActivity.class);
startActivity(intent);
finish();
虽然返回到了主界面,但是游戏并没有终止,还在后台运行,也就是并没有实际上关闭activity,这就导致了bug的产生,但是没有关系,接下来还有其他方法。
第二种:this.onDestroy();
在使用这个的时候,出现了cannot resolve method‘onDestroy()’,将this去掉以后显示可用。代码部分和上一个相同,将finish改为onDestroy即可。
结果视图如下:
通过实例可以清晰的看出结果:
Intent intent=new Intent(BattleActivity.this,MainActivity.class);
startActivity(intent);
onDestory();
虽然返回到了主界面,游戏也终止了,但是却产生了不愿意看到的提示信息,所以这个方法也是有漏洞的,也就是说用户体验极其不好(至少在这个地方的体验是不好的,至于以上这两个方法是否适用于其他地方那就另说了,也许finish适用于关闭activity但是仍在后台使用的一些地方)
第三种和第四方法:
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
结果视图:
通过实例可以清晰的看出结果:
Intent intent=new Intent(BattleActivity.this,MainActivity.class);
startActivity(intent);
System.exit(0);
//android.os.Process.killProcess(android.os.Process.myPid());
//System.exit(0);
被我用 // 注释起来的这两种方法都可以返回到主界面,并且下次打开的时候不会再重复出现飞机。以上省略android.os.Process.killProcess(android.os.Process.myPid());这个方法的过程,因为最终结果是一样的。
对于android.os.Process.killProcess(android.os.Process.myPid());这个方法我是一点点了解都没有,于是百度搜索,然后看的还是很迷茫,这里给出两个参考网页供大家观看:
https://www.cnblogs.com/lesliefang/p/3933640.html
https://www.cnblogs.com/wytings/p/5568758.html