关闭

【幻化万千戏红尘】qianfeng-Android-Day05-Activity生命周期,Actitity的启动模式基础学习:

185人阅读 评论(0) 收藏 举报
分类:
一、Activity生命周期
(一)、人的生命周期是怎么样的?
胎儿
婴儿
儿童、少年、青年、中年
突发变故
老年
死亡
(二)、Activity生命周期:
1、Activity一生中有七种不同的状态。
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()

1.打开一个应用,然后点击back键退出:
onCreate()--->onStart()--->onResume()---按back键--->onPause()--->onStop()--->onDestroy()


2.打开一个应用,然后点击home键退出,再重新打开应用:
onCreate()--->onStart()--->onResume()---点击home键--->onPause()---onStop()---重新打开应用--->onRestart()--->onStart()---onResume()


3.打开一个Activity,点击该Activity上的按钮跳转到SecondActivity:
M-onCreate()--->M-onStart()--->M-onResume()---点击跳转按钮---M-onPause()-->S-onCreate()--->S-onStart()--->S-Resume()--->M-onStop()


4.打开一个Activity,点击该Activity上的按钮跳转到SecondActivity,然后点击back键退出SecondActivity:
M-onCreate()--->M-onStart()--->M-onResume()---点击跳转按钮---M-onPause()-->S-onCreate()--->S-onStart()--->S-Resume()--->M-onStop()--
--点击back键退出SecondActivity--S-onPause()--->M-onRestart()--->M-onStart()--->M-onResume()--->S-onStop()--->S-onDestroy()


5.打开一个Activity,点击该Activity上的按钮跳转到ThirdActivity(ThirdActivity主题为Dialog模式),然后点击back键:
M-onCreate()-->M-onStart()-->M-onResume()--点击跳转按钮--M-onPause()-->T-onCreate()-->T-onStart()-->T-onResume()--
--点击back键-->T-onPause()-->M-onResume()-->T-onStop()-->T-onDestroy()

6.打开一个Activity,然后从竖屏切换为横屏
onCreate()->onStart()->onResume()---切换为横屏--->onPause()->onStop()->onDestroy()->onCreate()->onStart()-onResume()

7.打开一个Activity,然后从竖屏切换为横屏(onSaveInstanceState,onRestoreInstanceState):
onCreate()->onStart()-onResume()--切换横屏-->onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState()->onResume()

8.打开一个Activity,然后从竖屏切换为横屏(配置android:configChanges="orientation|screenSize")
onCreate()->onStart()->onResume()--切换横屏-->onConfigurationChanged()
【备注:】
A、七个生命周期组合:
onCreate、onStart、onResume:启动应用程序
onPause、onStop:失去焦点
onRestart、onStart、onResume:重新获得焦点
onPause、onStop、onDestroy :退出应用程序
B、七个生命周期按阶段划分:
onCreate() --- onDestroy() 完整生命周期    The entire lifetime
onStart() --- onStop() 可见生命周期     The visible lifetime:
onResume() --- onPause() 前沿生命周期(焦点生命周期)    The foreground lifetime:




(三)、生命周期的作用:
①当用户接一个电话或切换到另一个程序不会崩溃
②当用户后台运行程序时不会销毁有价值的系统资源
③当用户离开再返回你的应用时不会丢失用户的进程
④当手机屏幕进行横竖屏切换的时候不会崩溃或者丢掉用户的进程
(四)、实例代码操作:
模仿以下操作,观察输出日志,找寻生命周期方法依次回调的规律:
打开主界面,后退键退出
打开主界面,进入第二个页面
打开主界面,模拟电话进入及挂机,再次显示主界面
打开主界面,HOME键退出
打开主界面,HOME键退出,再次启动app
打开主界面,点击该界面中捆绑退出事件的按钮后退出
打开主界面,切换横屏竖屏。
二、Activity启动模式
任务与回退栈:
(一)、任务Task:
1、概念:
一个任务(task)就是在执行某项工作时与用户进行交互的Activity的集合。
这些Activity按照被打开的顺序依次被安排在一个堆栈中(回退栈)。


2、主屏页面:
设备的主屏是大多数任务的启动位置,当用户触摸一个应用程序启动器图标(或者app快捷图标),
应用程序的任务就会在前台显示。如果相关应用程序的任务不存在,那么就会有一个新的任务被创建,
并且应用程序打开的“主”Activity会作为任务中的根Activity。


(二)、回退栈:
1、概念:
在当前的Activity启动了另一个Activity时,这个新的Activity被放到了堆栈的顶部,并且带有焦点。
前一个Activity并没有消失,而是保存在回退栈中,此时它处于停止状态。
当用户按下回退按钮时,当前的Activity会被从回退栈的顶部弹出(这个Activity被销毁),而前一个Activity被恢复。
堆栈中的Activity不会被重新排列。因此,回退栈的操作跟后进先出的对象结构是一样的。
在用户按下回退按钮时,当前Activity被销毁,并且前一个Activity被恢复。如果用户继续按回退按钮,
那么回退栈中的每个Activity会被依次弹出,前一个Activity会被显示,
直到用户返回主屏(或者返回到任务开始时运行的那个Activity)。当所有的Activity从回退栈中被删除时,
这个任务就不再存在了。
(三)、Activity启动模式:
        在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。
在Android中Activity的启动模式决定了Activity的启动运行方式。
A、Activity启动模式设置:
        <activity android:name=".MainActivity" android:launchMode="standard" />
B、Activity的四种启动模式:
    1. standard(备注:standard是系统默认的启动模式。)
        标准启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。每个窗体的getTaskId()保持不变,
但是this.hashCode()发生改变。
    2. singleTop
        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,而不会创建新的Activity对象,
不过它会调用onNewIntent()方法。
如果栈顶部不存在就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
会回调onNewIntent()方法。
    3. singleTask
        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,
因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 
        和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,
而singleTask则会检测栈中全部的Activity对象,从上向下,
如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。
    4. singleInstance
        与singleTask模式的区别是存放singleInstance模式窗口对象的回退栈不能有其他任何窗口对象。
因此如果该窗口不存在,则要新建任务来存放该singleInstance模式窗口。
也就是说getTaskId()会发现任务id发生了变化。此启动模式和我们使用的浏览器工作原理类似,
在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。
此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。

http://blog.csdn.net/u012702547/article/details/49529825
三、石头剪刀布小游戏
0
0
查看评论

【幻化万千戏红尘】qianfengDay25-HTML基础学习:

Tomcat:服务器 免费 主要运行B/S程序 目录说明: bin:执行文件 lib:第三方的jar包 webapps:发布的项目   网络程序结构: 1、B/S 2、C/S   HTML:超文本标记语言 (HyperText Markup Languag...
  • u013742672
  • u013742672
  • 2016-08-12 20:05
  • 270

【幻化万千戏红尘】qianfeng-Android-Day07-AsyncTask基础学习:

异步任务AsyncTask及JSON解析 一、AsyncTask: (一)、相关知识回顾: 1、开发Android应用时必须遵守单线程模型的原则:         Android UI操作并不是线程安全的,并且...
  • u013742672
  • u013742672
  • 2016-08-30 20:43
  • 142

【幻化万千戏红尘】qianfeng-Android-Day17_ViewPager

ViewPager   一、ViewPager简介: (一)、作用: ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。ViewPager用于实现多页面的切换效果。该类存在于Google的兼容包里面,android.support.v4.view.Vie...
  • u013742672
  • u013742672
  • 2016-09-19 20:19
  • 127

【幻化万千戏红尘】qianfeng-Android-Day18_Fragment

Fragment 一、Fragment的概念和用法: (一)、概念:         Fragment是在Android 3.0 (API level 11)开始引入新的API技术。      ...
  • u013742672
  • u013742672
  • 2016-09-19 20:17
  • 84

【幻化万千戏红尘】qianfeng-Android-Day13_SQLiteOpenHelper

SQL基础入门 一.数据库查询语句:select 1. 查询所有数据: select * from 表名; select * from exam_books; 2.按照一定的条件查找: select * from 表名 where 条件; select * from...
  • u013742672
  • u013742672
  • 2016-09-19 20:22
  • 115

【幻化万千戏红尘】qianfeng-Android-Day13_SQLiteDataBases

SQLiteDatabase   一、SQLite: (一)、简介:         除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据。 在Andr...
  • u013742672
  • u013742672
  • 2016-09-19 20:21
  • 129

【幻化万千戏红尘】qianfeng-Android-Day20_LruCache

一、Android中的缓存处理及异步加载图片类的封装 一、缓存介绍: (一)、Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一。 1、没有缓存的弊端: · 流量开销:对于客户端——服务器端应用,从远程获取图片算是经常要...
  • u013742672
  • u013742672
  • 2016-09-19 20:15
  • 97

【幻化万千戏红尘】qianfeng-Android-Day20_Handler_Looper_MessageQueue

一、Android中的缓存处理及异步加载图片类的封装 一、缓存介绍: (一)、Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一。 1、没有缓存的弊端: · 流量开销:对于客户端——服务器端应用,从远程获取图片算是经常要...
  • u013742672
  • u013742672
  • 2016-09-19 20:14
  • 111

【幻化万千戏红尘】qianfeng-Android-Day20_Bitmap二次采样

Bitmap二次采样 一、二次采样: (一)、意义或目的:  1、用BitmapFactory解码一张图片时,有时会遇到该错误。这往往是由于图片过大造成的。要想正常使用,则需要分配更少的内存空间来存储。BitmapFactory.decodeFile(imageFile); 2、B...
  • u013742672
  • u013742672
  • 2016-09-19 20:13
  • 104

【幻化万千戏红尘】qianfeng-Android-Day12SharedPreference、内部存储、外部存储

Android数据存储——SharedPreferences及SDCard     一、数据存储选项:Data Storage ——Storage Options【重点】 1、Shared Preferences Store private primitive data...
  • u013742672
  • u013742672
  • 2016-09-19 20:24
  • 102
    个人资料
    • 访问:17140次
    • 积分:792
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:19篇
    • 译文:1篇
    • 评论:0条