退出程序时尚未finish的activity出现问题

最近在做一个android的项目,我主要负责服务器。这段时间不忙,就帮他们解决一些前台的技术问题。

刚刚就解决了一个问题,在退出应用后,所有尚未finishactivity都会依次弹出,这样显然是不合理的。

网上查了一些资料,根据项目实际情况,解决了此问题,下面把发放记在这里,大家如果发现有什么问题欢迎指教,相互交流才能共同进步。

解决这个问题要充分理解activity的生命周期。这个对一些新手如我来说是很重要的。下面贴出生命周期图。

 


   

我的解决方法就是重写每个activityonResart()方法,在里面将当前界面finish()掉。这样做的原因是onResart()只会在activityonStop转到onStart()中时才会调用,具体来说就是当你新生成一个activity时,你的调用流程是onCreate()->onStart()->onResume(),到了onResume()你的activity就可见了;当你从这个方法离开,但并没有finish这个方法,以后你再进入的时候,你的调用流程是onRestar()->onStart()->onResume();写到这里大家应该发现了,我只要在onRestart()里面放依据finish(),那么在我退出了整个android程序的时候,就会finish掉所有我尚未finish掉的activity,而且在程序运行的时候不会把我刚刚生成的activityfinish掉(因为新生成的会调用onCreate,不会调用onRestart,源代码如下:

 

    protected void onRestart()
    {
        super.onRestart();
        finish();
    }
 

 

大家应该发现了这个方法的弊端,那就是当你在程序运行的时候,想回到一个你之前离开时没有finish的界面,这个界面会被finish掉(因为调用了onRestart())。这个问题的解决方案就是在系统内部设置一个全局变量exit,当程序运行时exit=false,而当程序退出时修改exit=true。每当你进入一个没有finishactivity时,在onRestart()中判断一下exit的值,如果exit=false则不调用finishexit=true调用finish。这样当程序运行时不会将这些activityfinish掉,而一旦你退出程序,exit=true,后续出现的activity就会被finish掉,下面是源代码:

全局变量代码,这个地方我用的一个类的静态成员:

 

public class Helper {
    public static boolean exit = false;
}
 

 

onRestart()中的判断:

 

    protected void onRestart()
    {
        super.onRestart();
        if(Helper.exit)
        {
            finish();
        }  
    }
 

 

此处还有一点要格外注意,当你进入的程序的第一个activity时(也就是你每一次进入程序的时候),一定要在onCreate中加一句Helper.exit=false(我建议放在onCreate的第一句)。因为在JAVA中,类的静态成员的释放是由JAVA虚拟机来操作的,也就是说,当你退出你的程序的时候,exit不会被释放掉,这样当在JAVA虚拟机还没有释放掉exit的时候,你再进入程序,exit的值是你上次最后设置的true,这会出现什么问题?看看我们上面的介绍,对,你的程序无法返回到那些尚未finish而你又想进入的activity(因为这个时候exit=true,详细看第一部分代码和第二部分代码之间那段)。

 

写到这里目前的解决方案就都写完了,有什么错误或者存在什么隐患,欢迎大家指教。

新人第一篇博客,多谢大家支持。

 

 

猜你喜欢

转载自afly190272204.iteye.com/blog/1736255
今日推荐