Activity.finish()学习

最近回顾代码的时候遇到一个这样的问题。登陆时候选择不记住用户名密码,但是退出或注销的时候再次点开应用,登陆页面的用户名密码还在。郁闷一上午排查各种出现这种情况的原因:
第一种情况、点记住密码后,操作是使用SharedPreferences保存用户名密码。使用标记判断是否保存。debug跟踪后这种情况被排除。
第二种情况、我们由于项目上大量使用了静态变量,然后经常应为手机内存不够数据被清除,导致系统经常nullpointexception死掉,后来的解决办法在这篇文章中有介绍:使用onSaveInstanceState和onRestoreInstanceState来保存恢复被系统销毁的数据。那会不会是应为恢复静态变的原因?经测试发现确实是数据恢复了用户名和密码。但这个数据恢复肯定是不是注释掉啊。。。点击注销或退出系统是正常退出系统的,这些数据按理说应该是不会被恢复。
第三种情况、排除第二种情况后觉得问题很奇葩,“程序是不会出错的,出错的只有程序员”这句话在脑脑子里蹦出来。。苦思冥想会不会是应为在AndroidManifest.xml设置的LoginActivity这个activity的launchMode的原因。又看了一遍这篇文章http://blog.csdn.net/liuhe688/article/details/6754323/,觉得自己给登陆页面设置的启动方式singleTask是正确的。这样设置我们刚好避免了登陆完后点注销,再次登录,不断重复这两个操作后再点返回,结果一大堆的登陆页面。。。
第四种、排除上边三种后想想,再debug一遍一行一行走。。。终于发现问题正真的原因了,登陆完成之后没有finish();导致注销后启动的还是设置了启动方式为singleTask的LoginActivity(还是启动了第一次登陆页面)。设置完finish()后问题解决。写到这想起来,是不是不用设置singleTask就只要finish(),就可以解决第三种情况遇到的问题?结果是肯定了。

Activity.finish()使用:
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。安卓系统自己决定何时从内存中释放应用程序。当系统没有可用内存到时候,会按照优先级,释放部分应用。
Activity.onDestory()
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。
当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。

转载于:https://my.oschina.net/u/1269002/blog/673173

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值