开发中经常会遇到这样的情况:

按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退出程序到后台后再打开崩溃的问题相关推荐

  1. 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机

    笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机 尝试过从不关闭显示器,从不使计算机进入睡眠状态,设置睡眠那里一系列的东西,都没办法. 在我一度以为笔记本系统有问题的时候,突然发现有个在此之后关闭 ...

  2. mac系统安装Anaconda后再打开终端自动进入Anaconda环境

    mac系统 问题:安装Anaconda后再打开终端自动进入Anaconda环境,即显示(base) 解决方法: 方法一:输入命令:conda config --set auto_activate_ba ...

  3. el-upload点击打开文件上传弹窗之前进行其他操作,等待操作完成后再打开文件上传弹窗

    el-upload点击打开文件上传弹窗之前进行其他操作,等待操作完成后再打开文件上传弹窗 下面这一行代码是控制打开文件上传弹窗 <el-button class="btnUpload& ...

  4. 升级win10后 每次电脑休眠后再打开笔记本风扇狂转

    每次电脑休眠后再打开笔记本风扇狂转,无意间的解决办法,首先散热调到被动,这个网上都有说明,然而我的电脑还是会狂转,休眠开机后风扇狂转时点开Edge浏览器,随便打开个网页,就可以降速,屡试不爽.

  5. VMware虚拟机在重启后再打开的虚拟机连接不上网络问题解决方案(绝对靠谱)

    VMware虚拟机在重启后再打开的虚拟机连接不上网络问题解决方案(绝对靠谱) 这个问题浪费了我几个小时时间,现在总结下: Windows下安装的桌面虚拟化VMware为应用程序提供服务支持,这些服务支 ...

  6. word保存html格式批注没有了,Word批注保存后再打开没了

    回答: 招数一:将工作簿另存为SYLK格式 如果Excel文件能够打开,那么将工作簿转换为SYLK格式可以筛选出文档的损坏部分,然后再保存数据. 首先,打开需要的工作簿.在"文件" ...

  7. 解决关闭浏览器后再打开,访问网站仍然自动登陆的问题

    情况描述: 今天被授权以管理员身份登录管理系统,录入一些信息,但因为Chrome设置的是保存Cookie,并且先登录了自己的账号,所以即便关掉浏览器再打开,仍然是以自己的账号自动登录,而页面的注销按钮 ...

  8. Word中的TIF图像保存后再打开就模糊了

    改论文的时候,好不容易把tif图按照期刊要求都改完了,保存了再打开一看,好家伙全变糊了. 原因:Word会自动压缩TIF图像. 解决办法:文件--选项--高级--不压缩文件中的图像.

  9. plsql强制关闭后再打开提示已停止工作的解决办法

    昨天下班时强制关闭了plsql,早晨过来打开就提示已停止工作,最后无奈备份了配置文件重装,但是问题没能解决,依然提示停止工作.百度也没有找到有用的信息,在这里记录一下,方便遇到同样问题的朋友. 解决办 ...

最新文章

  1. CF932G Palindrome Partition
  2. 各类神经网络知识收集
  3. hdu-1251(基本字典树)
  4. 《说服力——让你的PPT会说话》读书笔记02
  5. 1.初次运行git前的配置
  6. CVPR2019最全整理:全部论文下载,Github源码汇总、直播视频、论文解读等
  7. c++编写手机小游戏代码_玩过自己开发的贪吃蛇吗?点这里,教你用Python写一个贪吃蛇小游戏!(附源代码)...
  8. ARM汇编程序设计之--数据搬移
  9. element input 自适应_input高度自适应。
  10. python实现简单的抢票程序
  11. 免费图片验证码识别方法,支持旋转图片识别
  12. 【组成原理-处理器】处理器的相关概念
  13. (项目部署)day60javaEE基础查漏补缺
  14. FFA 议程上线!实时化浪潮下,Apache Flink 还将在大数据领域掀起怎样的变革?...
  15. 三年程序员的实战开发经验之谈-做人做事建议
  16. Composer私有仓库建设与开发入门
  17. Android中对menu、home、back键的监听
  18. openwrt修改生成BIN文件大小以用于8M FLASH(WR703N)
  19. cocoscreator使用说明
  20. java判断是否是数组_java判断对象是否是数组

热门文章

  1. docker-compose.yml 启动jar 包
  2. windows powershell实战指南_【安全研究】powershell在主机中是否存在安全隐患?
  3. 数据结构特性解析 (二) ArrayList
  4. Docker知识6:实战!将一个tensorflow项目制作成Docker image
  5. 基于MATLAB的交流电动机调速系统仿真
  6. 2021-01-07 python opencv调节图片亮度与对比度
  7. oracle号码段拆开,知道号段起止,如何选择该号段内的所有号码?
  8. 13.MapReduce第3部分(编程实践WordCount)
  9. SqlServer基础之(触发器)
  10. 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理