Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

早在一月份的时候,在网上down了一份飞机大战的源码,但是有一个问题就是每次退出游戏界面再进入的时候,会产生一个bug:自己的飞机变成两个了。

在当时因为学识所限,在网上查了很久也没能找到解决办法。在三月初重新开始学习Android以后,终于在今天找到了解决办法。

首先是一个参考网页:

网页的内容是:四种结束当前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()这个方法似乎有些弊端,但我学识较浅,不太理解,详情请见:


【下面是第二个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);
        }
    }

结果视图:【分别是:主界面,第一次打开游戏界面,点击返回后返回到的主界面,第二次打开游戏界面】

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

通过实例可以清晰的看出结果:

                Intent intent=new Intent(BattleActivity.this,MainActivity.class);
                startActivity(intent);
                finish();

虽然返回到了主界面,但是游戏并没有终止,还在后台运行,也就是并没有实际上关闭activity,这就导致了bug的产生,但是没有关系,接下来还有其他方法。


第二种:this.onDestroy();

在使用这个的时候,出现了cannot resolve method‘onDestroy()’,将this去掉以后显示可用。代码部分和上一个相同,将finish改为onDestroy即可。

结果视图如下:

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

通过实例可以清晰的看出结果:

                Intent intent=new Intent(BattleActivity.this,MainActivity.class);
                startActivity(intent);
                onDestory();

虽然返回到了主界面,游戏也终止了,但是却产生了不愿意看到的提示信息,所以这个方法也是有漏洞的,也就是说用户体验极其不好(至少在这个地方的体验是不好的,至于以上这两个方法是否适用于其他地方那就另说了,也许finish适用于关闭activity但是仍在后台使用的一些地方)


第三种和第四方法:

    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(0);

结果视图:

 

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】Android Studio基础学习(入门六)——关闭一个用于飞机大战的activity的操作过程【结束当前activity的方法】

通过实例可以清晰的看出结果:

                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());这个方法我是一点点了解都没有,于是百度搜索,然后看的还是很迷茫,这里给出两个参考网页供大家观看:

因为killprocess这个方法我还不了解,这里我就不给出我的看法了,大家可以自行搜索相关解释……

;