资讯专栏INFORMATION COLUMN

安卓开发app在后台运行时页面数据被系统清除后操作之重启APP

legendmohe / 1146人阅读

摘要:当运行内存被其它应用占用完时,在进入时,时的当前页面数据没有被清除待进一步确认,此时页面正常,点击返回键之后显示的页面数据被清除了,而导致应用崩溃。每次界面数据被清理掉之后,再显示到前台时,都会重新走生命周期。

在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况:

1、每次打开时,app的入口页面总是被执行。

2、当运行内存被其它应用占用完时,在进入app时,home时的当前页面数据没有被清除(待进一步确认),此时页面正常,点击返回键之后显示的页面数据被清除了,而导致应用崩溃。

下面将针对这两个问题的处理方式进行相对应的说明。

一、如果activity的启动方式是singleTask,则会出现此问题。如果是默认的standard方式,则没有这样的问题(待进一步确认)。但是很多时候都需要使用singleTask方式启动界面,这时需要在app入口的界面的oncreate()方法中做以下处理。

if (!isTaskRoot()){
finish();
return;
}
说明:isTaskRoot():用来判断当前Activity是不是该任务栈中的根Activity,也就是说是不是一个启动的Activity。并且该activity是否被启动过。
    moveTaskToBack(boolean momRoot):是把当前的Activity退到后台,不是finish,并不会走ondestory()。参数nonRoot表示的含义是此方法对非根activity是否有效,也就是说true表示对所有activity均有效,false表示只对根activity有效。
    此时要注意该界面销毁时所做的操作,要避免空指针异常。
二、这里要讲两个方法:
1、
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putBoolean(SaveState,true);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SaveState,true);
}
onSaveInstanceState方法有这两个,第一个使用在非FragementActivity中,而第二个用在FragementActivity中。
该方法会在系统自动清除组件里的数据时会被调用。
2、
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.putBoolean(SaveState,true);
}
该方法会在系统销毁组件时会被调用。
用这两个方法保存的变量,可以在组件的onCreate(Bundle savedInstanceState)方法中取出。每次界面数据被清理掉之后,再显示到前台时,都会重新走生命周期。Fragement有自己的生命周期,也需要做处理。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2778.html

相关文章

  • 想让安卓 APP 如丝般顺滑?

    摘要:随着安卓手机市场占有率的节节攀升,随便在大街上找几个人估计用的都是安卓手机吧用安卓手机的人这么多,不知道大家是否曾经感觉到过卡顿死机是否遇到应用程序无响应闪退本文就为大家解释一下其中的原因,如何通过帧数来监测流畅度及解决此问题。 随着安卓手机市场占有率的节节攀升,随便在大街上找几个人估计 80% 用的都是安卓手机吧!用安卓手机的人这么多,不知道大家是否曾经感觉到过 APP 卡顿、死机?...

    陆斌 评论0 收藏0
  • Androidwebview详解

    摘要:恢复状态销毁在关闭了时,如果的音乐或视频,还在播放。经测试,在系统上运行稳定,可以正常调用,但是在系统上运行时出现崩溃。基本算是一个比较严重的,没办法解决。在方法中显示,并在方法回调时更新的进度值。需要在文件中声明和两个权限。文章大纲 一、webview基本介绍1.什么是webview2.为什么要使用webview3.webview基本操作 二、webview高级使用1.WebView状态2...

    hyuan 评论0 收藏0
  • 安卓App测试简析

    摘要:安卓调试桥简介即,他是提供的一个通用的调试工具,借助这个工具,我们可以很好的调试开发的程序,在安装的的开发包目录下。 安卓系统知识简介1.1安卓系统架构: 1、应用程序层 2、应用程序框架层 3、系统运行库库层 4、系统内核层 1.2安卓权限系统: Android操作系统其实是一个多用户的linux操作系统,每个android应用使用不同的用户,运行在自己的安全沙盘里。系统为所有的文件...

    KnewOne 评论0 收藏0
  • 功能相关 云手机服务器 UPhoneServer

    摘要:而云手机基于服务器架构,核数全部为的大核,没有小核,跑小游戏龙与王者占用核,跑王者荣耀只占用核,跑原神也刚刚核,所以核以内规格足以胜任所有大中型游戏。所以,架构同等核数的云手机只能望其项背,无法相提并论。 功能相关Q:云手机跟云游戏有什么区别? A:云游戏是云手机的一个特殊应用场景,其最终面向的是游戏玩家,因玩家对游戏体验的苛刻要求,需要满足低延迟20ms以内、帧率稳定30或60帧、高画质7...

    ernest.wang 评论0 收藏825
  • 小程序生命周期——小程序探索

    摘要:运行机制小程序启动会有两种情况,一种是冷启动,一种是热启动。建议小程序在必要时使用监听内存告警事件,进行必要的内存清理。 前言 以小程序为切入点,深入理解总结方方面面的知识点,做成系列文章,希望能得到大神的指点和帮助新人入门,承上启下才是好程序猿由于是系列第一篇文章,紧跟着的是一大段废话,只关心技术的可以跳过 转眼半年又要过去了,意味着来新公司快半年了,离上次写文章也半年了,浑浑噩噩...

    Caizhenhao 评论0 收藏0

发表评论

0条评论

legendmohe

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<