论Activity及启动模式,Fragment,Service的使用以及生命周期
Activity:
这是我总结出来的,介于Activity生命周期相对较多,我在Google官方的生命周期图上又加了几个常用的,便于大家理解
对于ACtivity,先说说启动模式(ps:复制党去死吧,这年头加一点自己的特色好吗):
1,默认模式,启动Activity的时候新建一个实例,然后推入栈中,生命周期从onCreate()开始(这是必须的)
2,singletop,顾名思义嘛,当Activity的实例在栈顶的时候,如果还要启动它,走onNewIntent(),应用实例:三条推送,点进去都是一个activity,这肯定用singletop啊.
3, singletask,启动它,都走onNewIntent(),然后把栈中位置在activity上面的Activity统统destroy,通常应用于首页,首页肯定得在栈底部,也只能在栈底部。
4,singleinstance,启动它,都走onNewIntent(),并且在一个新的栈里面,通常用于与程序分离的页面,比如说一个新闻程序,然后一个闹钟activity,肯定是singintance

这张图说一个稍微注意的地方,onsaveInstanceState(Bunble bundle)通常和onRestoreInstanceState(Bunble bundle)不会成对出现,onRestoreInstanceState这玩意儿不太好触发,给大家提个好办法,横竖屏切换的时候100%会触发。然后保存在onRestoreInstanceState()bundle里面的数据,就是onCreate的那个参数bundle啦,要怎么恢复就看开发者了。
/** 这几天项目上线,太累,基本没写博客了,说好的Fragment,现在开始*/
Fragment:
这玩意儿该怎么说呢。。。先贴一张生命周期图吧,图是Android官网最新的图,我自己加了一个挺有用的生命周期方法 (ps:再次鄙视写博客到处抄的人)

历史:先说说Fragment的来源吧(百度大部分的说法根本不要信,简直蛋疼,抄来抄去,都是错的),Android诞生之初是不支持触屏的,大家都知道,诺基亚的手机大家用过吧,一点点屏幕,Android刚开始也类似,小屏幕,一个屏幕View很少,Acvitity管理View就够了。但是,ios出来之后,Android改变了目标,Fragment就是赤裸裸的抄袭。。。做过ios开发的人都知道,一个VC可以嵌套好几个VC,这种做法就是Fragment的来源。4.0以前,很多Android应用的开发是很挫的,比如开源中国客户端的第一个版本。。。主Activity写了2000多行。tab切换的时候控制 View的显示,隐藏,这是多么蛋疼。。。。屏幕大了,View变多了,Activity没法管理这么多了,所以Fragment横空出世,类似ios VC嵌套VC的做法,Android中Activity管理Fragment,Fragment来管理自己的View,这样层级就变得非常轻松了。
知识:Fragment和Activity一样,都是视图管理器,有着自己的生命周期,它的生命周期依赖于Activity
重点:Fragment和Activity不一样,是开发者自己实例化的。实例化完,加到容器里面。这边主要有两种方法:
1,用replace,每次都会回调Fragment的oncreate和ondestroy,这种简单粗暴的做法,用处很少
2,用add和show(),hide()。这样每次创建完,show或者hide,什么生命周期都不调用,那比如说第一个tab切换到第二个tab,想在Fragment做点事怎么办呢,用我添加的onhiddenchanged()这个生命周期,在这里面操作。
好了,下一章讲Service。我的风格是纯原创,不抄,感谢大家支持。
Service:
今天我们来讲Service,这是个强大的组件,在后台执行任务,只要系统不回收,又不手动停止,它就在后台一直跑着。
注意:Service是在主线程的,要耗时的操作,起一个Thread吧
这个生命周期相对简单,我就稍微讲讲,进程间通讯用bindservice()启动,进程内就这这么干了,没啥意义,用startservice()吧
启动完第一次当然是onCreate()啦,然后onStartcommand(),销毁的时候onDestroy(),以后startservice()的时候,就不调用onCreate()了,直接从onStartCommand()了,
然后Service和Acvitity通信,就用万能的广播吧,说完了。
然后说说IntentService,这个Service的之类,也是相当有用,自动起一个带Looper循环的线程,onhandlerIntent()这个回调方法就是在线程中的,多任务队列执行,执行完自动destroy,省了不少事。
IntentService的源码大家可以看看,一共就不到200行,还是挺有趣,挺好理解的。
好了,这个篇幅完了,相信大家一定大有收获。
PS:
欢迎大家关注我的微信公众号"大土豆爱开发",技术包括但不限于JavaEE,Android,Git等。
论Activity及启动模式,Fragment,Service的使用以及生命周期的更多相关文章
- android Activity的启动模式与flag的见解
最近做一个安卓项目,想要实现的效果就是:当打开一个按钮的时候,启动了一个A功能,当用户返回到桌面再继续进去的时候,不过之前在哪个Activity,都会先跳转到A功能的那个界面,当用户点击返回的时候,再 ...
- Activity LauchMode启动模式(转载)
转载于:http://www.cnblogs.com/plokmju/p/android_ActivityLauncherMode.html 在一个Android应用中,不可避免的会包含多个Activ ...
- Activity的启动模式--总结
3. Activity的任务栈Task以及启动模式与Intent的Flag详解? 2,Activity次级页面和主页间来回跳转,防止重复创建Activity实例 1, activity的启动模式: / ...
- 关于activity的启动模式
在Android中每个界面都是一个Activity ,界面的切换实际上是对不同Activity实例化的过程.而启动模式就决定Activity启动运行方式. 1.设置方式它是在主配置文件中,Activi ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
- Activity的启动模式(android:launchMode)
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- 4种activity的启动模式
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- Activity的启动模式及回退栈的概念
Activity的启动模式 standard 正常模式 在创建一个新的activity的时候,直接在栈顶创建一个新的activity singleTop 顶部单个 在创建一个新的activity的时候 ...
- Activity 的启动模式
好久没用过那几种activity的启动模式了,如今看到singletop竟然傻了眼,完全忘记了这几种启动模式的区别!隧将两年前的总结翻出来,通读一遍那晦涩难懂的记录,又理解了一遍,在以前记录的基础上, ...
随机推荐
- 对 Servlet 的改进--------Struts2 引入
通过上一篇博客:Servlet 的详解 http://www.cnblogs.com/ysocean/p/6912191.html,我们大致知道了 Servlet 的基本用法.但是稍微分析一下 Ser ...
- 【知识整理】惊现RecyclerView内部Bug???别急,我们慢慢解决它~
一.写在前面 这也是久违的一整个月没有写Blog,也是由于近期给妹纸找工作,各种坑蒙拐骗,然而都没卵用.额,广大朋友们,成都需要软件测试.线上运维.产品助理的伙伴,赶紧私聊我了.这妹纸,学习能力挺好, ...
- VR全景智慧城市——宣传再华丽,不如用户亲身参与
在当今社会上,VR和AI已经成为黑科技的代名词了.同样都是很热门的科技,但是它们的出场方式却差距不小.AI的出场方式是很有科技范,而VR的出场方式却是土豪气十足. 营销是什么,是通过制造爆点,用爆点实 ...
- 一天搞定CSS:文本text--05
1.文本体系 2.文本各属性取值 说明: 每一个属性后面的分支是属性值,以及对属性值的说明. 比如text-align- - - -有3个取值:left,center,right 3.空格大小 4.代 ...
- 遇到bug我会怎么做
我今天遇到一个问题,ztree显示数据,本来这个功能是没有问题的,但是当我新加入了几个页面筛选条件时,将集合传入ztree ,页面缺一直没显示出来,弄了两个小时,代码我都仔细排查了一次,发现没有问题, ...
- 逆向libbaiduprotect(四)
百度加固libbaiduprotect.so自身对只读字符串进行了加密保护,防止成为破解和逆向的切入口.一般地认为,只要找出这个解密算法就可以对.rodata段的只读字符串进行破解,从而窥探程序的意图 ...
- 读Zepto源码之样式操作
这篇依然是跟 dom 相关的方法,侧重点是操作样式的方法. 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2. ...
- 有关苹果无法导出p12证书的问题解决办法。
原因一 所选类型选择错误.解决办法:左侧有两个分类,一个是钥匙串,一个是种类,要选择种类中的我的证书或者证书.然后在右侧证书列表中,右键导出即可. 原因二 使用钥匙串生成的证书有问题,格式为(cert ...
- input响应慢问题解决办法
input[file]标签的accept属性可用于指定上传文件的 MIME类型 . 例如,想要实现默认上传图片文件的代码,代码可如下: <input type="file" ...
- 解密SuperWebview的一种另类方法
解密SuperWebview的一种另类方法 什么是SuperWebview SuperWebview是APICloud官方推出的另一项重量级API生态产品,以SDK方式提供,致力于提升和改善移动设备W ...