Activity生命周期以及启动模式对生命周期的影响(二)
前面一篇文章概述了Android四大组件之一的Activity生命周期方法的调用先后顺序,但对于非标准启动模式下Activity被多次调用时的一些生命周期方法并未详细阐述,现在针对该情况着重记录.
- 现象
 
发布会demo中出现了这样的一种现象:当界面即将出现时,语音重复唤起该界面时,由于在onPause中调用了finish(),界面一直未显示出来,这不是我们想要的.
- 分析
 
由于系统组这边存在的一个bug,全屏的Activity出现时会带起在后台运行的应用界面,所以我们这边的Activity不得不采用singleTask的启动模式来规避该问题(暂时还未找到有效方法解决),由此当非第一次启动时,先走该Activity的onPause,
然后再走onNewIntent,最后onStart-->onResume-->界面展示且获取到焦点.那么根据这个顺序我们就可以采用下面的方式来解决了.
- 解决办法
 
我们现在onPause方法中,用主线程的handler去post一下,是否需要finish()掉界面.这样操作可以把post的消息内容置于onNewIntent消息之后执行.
如果是通过onNewIntent启动,那么我们就不操作;
如果是通过onCreate启动,那么我们就finish()掉.
具体代码如下
  private boolean isStartedAgain = false;
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        this.isStartedAgain = true;
    }
   @Override
    protected void onPause() {
        super.onPause();
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                if (isStartedAgain) {
                    isStartedAgain = false;
                } else {
                    uiHandler.removeMessages(0);
                    finish();
                }
            }
        });
    }
像这样,如果你是第一次启动该Activity,不会走onNewIntent方法;当再次启动时,onPause-->onNewIntent-->post的消息队列.
那么onPause时,把要执行的runnable抛出来,onNewIntent时,标志isStartedAgain为true(默认为false),
最后判断run方法中如何走;如果是再次启动isStartedAgain=true的话,不会关掉界面;如果是第一次启动,即isStartedAgain=false的话,移除动画操作的消息(不做此操作有出现使用已关闭的Activity对象异常的风险),并且finish()掉界面.
- 小结
 
一切的理论都要经得起实践的考验,一切不以解决问题为目的的博客文章都是在打酱油.问题得到了解决,灰常开心.
Activity生命周期以及启动模式对生命周期的影响(二)的更多相关文章
- Activity生命周期以及启动模式对生命周期的影响
		
前天用户体验反馈的一个需求,要求每次进入应用都定位到首页;这个操作很明显不适合放在首页Activity(启动模式为SingleTask)的onResume中,如果对Activity的启动模式和生命周期 ...
 - Android开发艺术探索(一)——Activity的生命周期和启动模式
		
Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...
 - 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
		
第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...
 - Activity的生命周期和启动模式
		
Activity的生命周期分析 典型情况下的生命周期.是指在用户参与的情况下,Activity所经过的生命周期的改变. 异常情况下的生命周期.是指Activity被系统回收或者由于当前设备的Confi ...
 - Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
		
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
 - Android Activity生命周期及启动模式
		
曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...
 - Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式。
		
原文:Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();singleTask的两种启动方式. Android Activity 的四种启动模 ...
 - Android零基础入门第77节:Activity任务栈和启动模式
		
通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的方式来管理Activity的实例.当启动一个应用时,Android就会为之 ...
 - Activity的四种启动模式和onNewIntent()
		
转自:http://blog.csdn.net/linghu_java/article/details/17266603 Android中Activity启动模式详解 在Android中每个界面都 ...
 
随机推荐
- Sqli-labs介绍、下载、安装
			
SQLI和sqli-labs介绍 SQLI,sql injection,我们称之为sql注入.何为sql,英文:Structured Query Language,叫做结构化查询语言.常见的结构化数据 ...
 - Linux的重定向与管道
			
(1).输出重定向 定义:将命令的标准输出结果保存到指定的文件中,而不是直接显示在显示器上. 输出重定向使用>和>>操作符. 语法:cmd > filename,表示将标准输出 ...
 - 【Numpy】python机器学习包Numpy基础知识学习
			
一.安装:在之前的博客中已经写过:http://www.cnblogs.com/puyangsky/p/4763234.html 二.python数组切片知识: python中序列类有list.str ...
 - Linux基础系列-Day7
			
NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...
 - 【并查集】Gym - 101128B - Black Vienna
			
有26张牌(A~Z),其中三张被拿走了.其余23张被分发给了两个人.给你m次调查结果,一次调查结果是对其中一个人询问一对牌,他会告诉你他有这对牌的几张(0~2).问你有多少种被拿走的牌的组合. 三重循 ...
 - 【贪心】POJ2376-Cleaning Shifts
			
[题目大意] 给出几个小区间和大区间,求覆盖整个大区间的最少小区间个数,如果不可能则输出-1. [思路] 这道程序写得我很不爽快,迷迷糊糊写完了,提交一遍AC了,可是我自己都没怎么弄懂到底是怎么写出来 ...
 - Problem J: 零起点学算法105——C语言合法标识符
			
#include<stdio.h> #include<ctype.h>//调用isalpha函数 int main() { int n; ]; while(scanf(&quo ...
 - Problem A: 零起点学算法91——找出一个数组中出现次数最多的那个元素
			
#include<stdio.h> int main() { ],b[]={}; while(scanf("%d",&n)!=EOF) { ;i<n;i+ ...
 - storm一键脚本
			
1一键脚本 #!/bin/bash # 1 声明 #-------------------------------------- #请在strom/bin/下执行脚本 #supervisor-host ...
 - NAND Flash大容量存储器K9F1G08U的坏块管理方法
			
转: http://www.360doc.com/content/11/0915/10/7715138_148381804.shtml 在进行数据存储的时候,我们需要保证数据的完整性,而NAND Fl ...