文档章节

Activity.finish()学习

Bonjourss
 Bonjourss
发布于 2016/05/11 09:17
字数 814
阅读 16
收藏 0
最近回顾代码的时候遇到一个这样的问题。登陆时候选择不记住用户名密码,但是退出或注销的时候再次点开应用,登陆页面的用户名密码还在。郁闷一上午排查各种出现这种情况的原因:
第一种情况、点记住密码后,操作是使用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()方法。

本文转载自:http://blog.csdn.net/yan943789510/article/details/44957097

Bonjourss
粉丝 2
博文 37
码字总数 2312
作品 0
虹口
程序员
私信 提问
Android提高第五篇之Service

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 上次介绍了Activity以及Intent的使用,这次就介绍Service,如果把Activity比喻为前台程序,那么Service就是后台程序,Service...

晨曦之光
2012/03/14
286
0
安卓完全退出程序的六种方法(欢迎新手学习,大手指导)

1. Dalvik VM的本地方法 //杀死进程 android.os.Process.killProcess(android.os.Process.myPid()) //抛异常强制退出 System.exit(0); 2.任务管理器方法 //通过activity管理器重启 Activity...

qazqaz12378
2014/01/28
0
0
Android_完全退出

/ 应用程序Activity管理类 @author liux */ public class AppManager { private static Stack<Activity> activityStack; private static AppManager instance; private AppManager(){} / 单一......

____追梦人
2015/09/26
138
0
一键关闭所有Activity

ArrayList<Activity> list = new ArrayList<Activity>(); /** * Activity关闭时,删除Activity列表中的Activity对象 / public void removeActivity(Activity a) { list.remove(a); } /* * 向......

Jamsm
2016/07/27
32
0
使用自定义的Activity栈来管理android的Activity

在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplication().getActiveScreen()来得到位于最上一...

Kevin_Gan
2010/07/07
470
0

没有更多内容

加载失败,请刷新页面

加载更多

给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践

作者 | 孙健波(天元) 阿里巴巴技术专家 本文整理自 11 月 21 日社群分享,每月 2 场高质量分享,点击加入社群。 早在 2011 年,阿里巴巴内部便开始了应用容器化,当时最开始是基于 LXC 技术...

阿里巴巴云原生
今天
6
0
数据平面

3.1数据平面的任务 解析数据包头 转发数据包到某些端口 通过查询由控制平面所生成的转发表 传统网络数据平面 数据包--输入端口---拆封和解析,转发策略匹配,转发调度---输出端口(协议相关,...

Firefly-
昨天
6
0
如何高效的阅读uni-app框架?(建议收藏)

作者 | Jeskson 来源 | 达达前端小酒馆 uni-app的框架,配置:page.json,manifest.json,package.json,vue.config.js。脚本,应用程序,main.js。日志打印,定时器,生命周期,页面,页面通...

达达前端小酒馆
昨天
7
0
实现原理专题--存储器的实现(三)

计算机实现原理专题--存储器的实现(二)中描述了一种电平触发器,但是某些应用需要在保持位从0到1变化的过程中对数据端进行保存。这种触发器叫边沿触发器。 一开始Q为0,时钟信号为0。当数据...

FAT_mt
昨天
4
0
3.类型严格的调用方法

需要注意的是,方法调用的时候需要严格的对应,如果是使用_stdcall修饰的方法,那么就只能用对应的类型的工具加载,如果不使用,很可能会出现找不到的现象。 对于动态链接库的调试,官方文档...

鬼上身跳不过门槛
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部