按home退出程序到后台后再打开崩溃的问题
开发中经常会遇到这样的情况:
按home键退出程序,让其运行在后台,然后去操作其他程序或放置在一边,过一段时间再次打开时可能会出现崩溃。
分析原因(有可能是别的原因):
在Application中声明了若干静态变量,这些静态变量往往只在程序一开始的时候初始化,然后应用在多个activity,当程序退出到后台运行的时候,
手机可能会因为内存不足而杀掉该进程,这时application中的静态变量也被清空。而当再次点开程序时,当前activity中可能正好用到其中某个静态变量,从而
抛出空指针异常。
解决办法:
打开activity的时候判断当前程序是否被系统杀掉,如果是则需重新启动。
1、在applciation中声明变量flag,用于标志程序是否被杀掉
1 package com.zy.baseproject.application; 2 3 import com.zy.baseproject.bean.User; 4 5 import android.R.integer; 6 import android.app.Application; 7 8 public class MyApplication extends Application { 9 private static User user; 10 public static int flag=-1; 11 12 public static User getUser() { 13 return user; 14 } 15 16 public static void setUser(User user) { 17 MyApplication.user = user; 18 } 19 20 }
MyApplication.java
2、在启动页(SplashActivity)中改变flag的值
MyApplication.flag=0;
3、新建BaseActivity(除SplashActivity外所有Activity都需要继承这个Activity),在这里判断是否需要重启程序
1 package com.zy.baseproject.activity; 2 3 import com.zy.baseproject.application.MyApplication; 4 5 import android.app.Activity; 6 import android.content.Intent; 7 import android.os.Bundle; 8 9 public abstract class BaseActivity extends Activity { 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 // TODO Auto-generated method stub 13 super.onCreate(savedInstanceState); 14 if(MyApplication.flag==-1){//flag为-1说明程序被杀掉 15 protectApp(); 16 }else { 17 setContentView(); 18 initializeView(); 19 initializeData(); 20 } 21 } 22 23 protected void protectApp() { 24 Intent intent=new Intent(this,MainActivity.class); 25 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//清空栈里MainActivity之上的所有activty 26 startActivity(intent); 27 finish(); 28 } 29 30 protected abstract void initializeData(); 31 32 protected abstract void initializeView(); 33 34 protected abstract void setContentView(); 35 36 }
BaseActivity.java
4、MainActivity中复写protectApp()方法,直接跳转到启动页,重启activty,重新初始化application中的静态变量
@Overrideprotected void protectApp() {startActivity(new Intent(this,SplashActivity.class));finish();}
5、MainActivity的启动模式设为singleTask,保证MainActivty在栈中只有一个并且在最底层
转载于:https://www.cnblogs.com/3A87/p/4861588.html
按home退出程序到后台后再打开崩溃的问题相关推荐
- 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机
笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机 尝试过从不关闭显示器,从不使计算机进入睡眠状态,设置睡眠那里一系列的东西,都没办法. 在我一度以为笔记本系统有问题的时候,突然发现有个在此之后关闭 ...
- mac系统安装Anaconda后再打开终端自动进入Anaconda环境
mac系统 问题:安装Anaconda后再打开终端自动进入Anaconda环境,即显示(base) 解决方法: 方法一:输入命令:conda config --set auto_activate_ba ...
- el-upload点击打开文件上传弹窗之前进行其他操作,等待操作完成后再打开文件上传弹窗
el-upload点击打开文件上传弹窗之前进行其他操作,等待操作完成后再打开文件上传弹窗 下面这一行代码是控制打开文件上传弹窗 <el-button class="btnUpload& ...
- 升级win10后 每次电脑休眠后再打开笔记本风扇狂转
每次电脑休眠后再打开笔记本风扇狂转,无意间的解决办法,首先散热调到被动,这个网上都有说明,然而我的电脑还是会狂转,休眠开机后风扇狂转时点开Edge浏览器,随便打开个网页,就可以降速,屡试不爽.
- VMware虚拟机在重启后再打开的虚拟机连接不上网络问题解决方案(绝对靠谱)
VMware虚拟机在重启后再打开的虚拟机连接不上网络问题解决方案(绝对靠谱) 这个问题浪费了我几个小时时间,现在总结下: Windows下安装的桌面虚拟化VMware为应用程序提供服务支持,这些服务支 ...
- word保存html格式批注没有了,Word批注保存后再打开没了
回答: 招数一:将工作簿另存为SYLK格式 如果Excel文件能够打开,那么将工作簿转换为SYLK格式可以筛选出文档的损坏部分,然后再保存数据. 首先,打开需要的工作簿.在"文件" ...
- 解决关闭浏览器后再打开,访问网站仍然自动登陆的问题
情况描述: 今天被授权以管理员身份登录管理系统,录入一些信息,但因为Chrome设置的是保存Cookie,并且先登录了自己的账号,所以即便关掉浏览器再打开,仍然是以自己的账号自动登录,而页面的注销按钮 ...
- Word中的TIF图像保存后再打开就模糊了
改论文的时候,好不容易把tif图按照期刊要求都改完了,保存了再打开一看,好家伙全变糊了. 原因:Word会自动压缩TIF图像. 解决办法:文件--选项--高级--不压缩文件中的图像.
- plsql强制关闭后再打开提示已停止工作的解决办法
昨天下班时强制关闭了plsql,早晨过来打开就提示已停止工作,最后无奈备份了配置文件重装,但是问题没能解决,依然提示停止工作.百度也没有找到有用的信息,在这里记录一下,方便遇到同样问题的朋友. 解决办 ...
最新文章
- CF932G Palindrome Partition
- 各类神经网络知识收集
- hdu-1251(基本字典树)
- 《说服力——让你的PPT会说话》读书笔记02
- 1.初次运行git前的配置
- CVPR2019最全整理:全部论文下载,Github源码汇总、直播视频、论文解读等
- c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...
- ARM汇编程序设计之--数据搬移
- element input 自适应_input高度自适应。
- python实现简单的抢票程序
- 免费图片验证码识别方法,支持旋转图片识别
- 【组成原理-处理器】处理器的相关概念
- (项目部署)day60javaEE基础查漏补缺
- FFA 议程上线!实时化浪潮下,Apache Flink 还将在大数据领域掀起怎样的变革?...
- 三年程序员的实战开发经验之谈-做人做事建议
- Composer私有仓库建设与开发入门
- Android中对menu、home、back键的监听
- openwrt修改生成BIN文件大小以用于8M FLASH(WR703N)
- cocoscreator使用说明
- java判断是否是数组_java判断对象是否是数组
热门文章
- docker-compose.yml 启动jar 包
- windows powershell实战指南_【安全研究】powershell在主机中是否存在安全隐患?
- 数据结构特性解析 (二) ArrayList
- Docker知识6:实战!将一个tensorflow项目制作成Docker image
- 基于MATLAB的交流电动机调速系统仿真
- 2021-01-07 python opencv调节图片亮度与对比度
- oracle号码段拆开,知道号段起止,如何选择该号段内的所有号码?
- 13.MapReduce第3部分(编程实践WordCount)
- SqlServer基础之(触发器)
- 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理