android-APP长期运行于后台,重启后如何避免异常
问题的详细描述是这样的:
android中,当我们按home键(一般指手机的物理按钮的中间那个键)回到手机桌面,此时app并没有退出,而是一直运行与后台中,此时如果我们点击app图标,还是会进入刚刚的界面之中。但是这存在一个问题,就是如果内存紧张或者当我们回到桌面,点击了别的应用造成内存紧张,此时再通过点击图标进入app,此时会出现异常。这样造成的用户感觉非常不好!
其实,归纳起来,并不仅仅这种情况下造成数据丢失,造成数据丢失的情况有如下几种:
(1)、当用户按下HOME键时。
这是显而易见的,不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,因此系统会调用onSaveInstanceState(),让用户有机会保存某些非永久性的数据。
(2)、长按HOME键,选择运行其他的程序时。
(3)、按下电源按键(关闭屏幕显示)时。
(4)、从activity A中启动一个新的activity时。(这种情况应该是,当我们在activity A时,此时通知栏有其他的通知,我们点击通知启动activity B,此时我们进入别的应用)
(5)、屏幕方向切换时,例如从竖屏切换到横屏时。
值得幸运的是,android对此提供了非常好的解决办法!
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。
protected void onSaveInstanceState(Bundle outState) {
System.out.println(BaseActivity.onSaveInstanceState());
outState.putString(loginname, Application.LOGINNAME);
outState.putInt(classId, Application.classId);
outState.putSerializable(classinfos,
(ArrayList)Application.getInstance().getClassInfos());
super.onSaveInstanceState(outState);
@SuppressWarnings(unchecked)
protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println(BaseActivity.onRestoreInstanceState());
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
Application.LOGINNAME = savedInstanceState.getString(loginname);
Application.classId = savedInstanceState.getInt(classId);
Application.getInstance().setClassInfos(
(List)savedInstanceState.getSerializable(classinfos));
实例代码如上,通过重写上面两个方法保存一些需要当前界面或者整个应用需要使用的数据,缓存起来,等到重新启动时,这些数据依然存在,这样重启之后不会造成app异常退出!
需要提醒的是,我们开发一个app的时候,activity是非常多的,一个界面中需要的数据很多,并且不知道用户会在哪个activity中按下Home键退回到了手机桌面,这样该如何处理呢?
此时的解决办法是,使用一个基本BaseActivity,在BaseActivity重写onSaveInstanceState和onRestoreInstanceState两个方法,然后每个界面Activity继承基类BaseActivity,这样不必每个activity重写这两个方法,同时,不管在哪个activity中按下home键,都会把数据保存起来,重启之后数据不至于丢失!
&&&&&&&&&&&& 分隔符&&&&&&&&&&&&&-
另外,还有一个地方需要说明,有些app可能想每次点击应用图标的时候,都能够进入主界面,不管此时app处于什么状态,不管app此时是否运行与后台,这时可以使用activity的配置
启动的activity中配置android:launchMode=&singleTask&即可。这样配置,保证每次点击应用图标,都进入主界面内,不管此时app是否运行与后台之中。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'查看: 2928|回复: 2
有些安卓游戏改了底层包名,签好名,***到手机一打开就是提示停止运行,怎么解决啊
阅读权限10
有些安卓游戏改了底层包名,签好名,***到手机一打开就是提示停止运行,怎么解决啊
发帖求助前要善用【】功能,那里可能会有你要找的***;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
改的不彻底呗。。呵呵。。继续找继续改。。
发帖求助前要善用【】功能,那里可能会有你要找的***;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
改的不彻底呗。。呵呵。。继续找继续改。。
大神请指点12,我一般就改了androidmanifest.xml& && &还有哪里需要改吗
发帖求助前要善用【】功能,那里可能会有你要找的***;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz! X3.2
Comsenz Inc.安卓手机,打开有些软件时显示强制关闭?是怎么回事?-为什么有时候手机软件打开时显示,已停止运行? 怎么办
你的位置:
安卓手机,打开有些软件时显示强制关闭?是怎么回事?
安卓手机,打开有些软件时显示强制关闭?是怎么回事?
内存小,没有其他的硬件问题。希望能采纳。再不好用就刷一次系统,应该能解决一下。建议你把一些没有用的软件卸载掉,有时就出现您说的问题,装一个优化文件,绝对有改善的。我的手机就是和你的问题差不多,在运行一些软件时,有时能运行还可以,会卡 反应迟缓一个是你手机的处理器配置低,把后来***的文件都***到内存卡上
后来我刷了4,我***后每次打开后总是被强制退出.2的版本,重刷了这个rom还是不行可能是软件本身跟你手机不兼容。以前我手机是2,开始能用淘宝客户端,后来淘宝客户端升级了.1.3.6的
应该是手机运行内存Ram不足或软件的问题
和手机运行内存没关系,要自身内存,CUP不好也是关键
手机内存不足,或是软件有问题,
安卓手机下载软件后打开软件无法使用 出现应用程序XX意外停止,请重试.。 然后有一个选择就是强行关闭...----
有太多原因 比如你没有***谷歌商店 手机不支持 或者版本不支持,下载的软件有问题。要看了手机才知道打开安卓软件或游戏时,会提示:强制关闭,怎么解决??----
说明此游戏可能和你的系统不兼容 玩不了。或者有时候内存不足了也会提示此信息。重启手机再试试也可以手机***软件后软件打不开需要强行关闭,怎么回事??----
为什么手机里的软件刚打开就被强行关闭?该怎么办 1 2010-05...而且...手机老显示XX在应用程序中无响应,一个等待,一个强行关闭,只有关闭,怎么回事啊!!!怎么处理!----
安卓手机出现某程序无响应,如果是多个程序均出现这样的情况,可能是手机系统存在问题。此种情况建议用户尝...手机应用一直强行关闭,怎么办?----
一直强行关闭的话,应该不是软件的问题了,手机系统出现了错乱呢! 用应用宝...是安卓的吗?是就在电脑...安卓手机,下什么程序都打不开,老提示应用程序意外停止,然后就是强行关闭了,崩溃了。。----
老提示应用程序意外停止,然后就是强行关闭了,崩溃...重新下载也一样没用,好无语啊,到底是怎么回事....安卓系统应用程序被我强行关闭,怎么再打开啊我擦,不能用了----
将安卓系统文件删除,需要通过刷机来恢复,具体方如下:1、在专业人士的指导下进行刷机,具体步骤为:a、...我的手机好多程序都停止运行了事怎么回事----
例如安卓手机,出现很多软件无故停止运行,通常是系统出现问题导致的。出现此种情况,建议用户备份好手机数...
你可能感兴趣的相关资料