还记得前段时间去看漫威的复仇者联盟四,仍记得空间上听说有人把好友中剧透狗直接处以删除好友操作了,很有勇气。
不走篇了,昨天不是瞎扯了半天,提了一个猜测吗,说真的,我自己都忘得差不多了= =,今天还是先把话圆回来,一般情况我是不会特地去修改以前写的博客内容的,因为我并不希望自己去欺骗自己。我所希望实现的结果是,终有一天,当我回来看我的成果,我一天天的进步,我会露出欣慰的笑容。
先亮出昨天的猜测:(其实我并不喜欢复制粘贴这个功能,因为这个功能很多时候让人们变得更蠢)

手机资源是不是很宝贵的,但是在ActivityThread的ActivityRecord栈中的Activity除非执行onDestroy方法(或者其他原因退出让其从栈中弹出),不然基本就一直存在于内存中,所以适当释放一些内存其实还是有一定的道理的= =。这又是什么意思呢?如果我打开一个新的界面,这个时候原来的Activity虽然不位于前台了,但是依然还是认为处于Activity可视状态的对吧,如果我在原来这个Activity中添加一个逻辑,不断地请求网络数据,并刷新界面,是不是意味着这个完全没有意义的非前台界面刷新逻辑还在一直持续,所以这个时候,应该果断地在onPause中断开刷新界面逻辑。

关键词:唯一(所以我附上了妇联四中关键的一幕2333)

我的测验仅仅是很简单的测验,但我相信,绝对比这种图清晰:

虽然人类对于图片的敏感性要远超文字信息,但是这种类型的图片= =,emmmm,就不一定了
测验方法也很简单

  1. 为Activity设置一个基类BaseActivity,重写流程性回调接口如下:我的目的仅仅是在执行到对应接口是打印对应的日志信息。
public abstract class BaseActivity extends AppCompatActivity {protected void log(String process) {Log.e("ciruy error", process+":"+ getClass().getCanonicalName());}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);log("create");}@Overrideprotected void onStart() {super.onStart();log("start");}@Overrideprotected void onResume() {super.onResume();log("resume");}@Overrideprotected void onPause() {super.onPause();log("pause");}@Overrideprotected void onStop() {super.onStop();log("stop");}@Overrideprotected void onDestroy() {super.onDestroy();log("destroy");}
}
  1. 创建两个Activity,FirstActivity和SecondActvity,两个视图的布局文件基本相同,都是仅仅在中央位置显示了一个标志当前的类的文本视图,为FirstActivity的文本视图设置点击事件,点击后跳转到SecondActivity。
public class FirstActivity extends BaseActivity {TextView toSecond;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);toSecond = findViewById(R.id.toSecond);toSecond.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(FirstActivity.this, SecondActivity.class));}});}
}
  1. 然后将app跑起来,从第一个Activity跳转到第二个Activity后,再点击back回到FirstActivity,瞄一眼输出日志
05-12 14:50:18.875 26014-26014/francis.ciruy.com.demoapp E/ciruy error: pause:francis.ciruy.com.demoapp.FirstActivity
05-12 14:50:18.882 26014-26014/francis.ciruy.com.demoapp E/ciruy error: create:francis.ciruy.com.demoapp.SecondActivity
05-12 14:50:18.894 26014-26014/francis.ciruy.com.demoapp E/ciruy error: start:francis.ciruy.com.demoapp.SecondActivity
05-12 14:50:18.894 26014-26014/francis.ciruy.com.demoapp E/ciruy error: resume:francis.ciruy.com.demoapp.SecondActivity
05-12 14:50:19.324 26014-26014/francis.ciruy.com.demoapp E/ciruy error: stop:francis.ciruy.com.demoapp.FirstActivity
05-12 14:50:21.217 26014-26014/francis.ciruy.com.demoapp E/ciruy error: pause:francis.ciruy.com.demoapp.SecondActivity
05-12 14:50:21.225 26014-26014/francis.ciruy.com.demoapp E/ciruy error: start:francis.ciruy.com.demoapp.FirstActivity
05-12 14:50:21.225 26014-26014/francis.ciruy.com.demoapp E/ciruy error: resume:francis.ciruy.com.demoapp.FirstActivity
05-12 14:50:21.543 26014-26014/francis.ciruy.com.demoapp E/ciruy error: stop:francis.ciruy.com.demoapp.SecondActivity
05-12 14:50:21.543 26014-26014/francis.ciruy.com.demoapp E/ciruy error: destroy:francis.ciruy.com.demoapp.SecondActivity

一目了然了,执行的顺序为
pause1->create2->start2->resume2->stop1
(至此已经从FirstActivity跳转到SecondActivity)
->
pause2->start1->resume1->stop2->destroy2
(至此已从SecondActivity返回到FirstActivity)

Activity跳转的逻辑是这样的,Act1收到了跳转到Act2的请求,Act1将请求发送到AMS(Activity Manager Service),然后AMS寻找这个请求是不是有问题(比如说希望启动的Activity到底是不是存在的,比如说很多时候常常会犯的错误,没有在manifest中配置Activity),如果一切都没有问题,那么就通过Binder机制通过ATP(ActivityThreadProxy)告诉Activity,好啦,你可以歇着了,这个时候Activity1才会执行onPause,然后Activity2启动(包括ActivityThread,Looper,Application的依次创建等,这些不在今天的玩耍中,我这边就不详细讲了),然后等到Activity2执行到onResume后,Activity1才会执行onStop()。

到这里,能理解为什么我会特地放那张漫威的奇异博士的手势搞笑图了吧,因为就是这个意思:

只能有一个前台Activity存在!我被放在前台的时候,就是你谢幕的时候!

关键词 onStart()和onResume()存在的原因(测验篇)两者的区别相关推荐

  1. 开发日记-20190511 关键词 onStart()和onResume()存在的原因(猜测篇)

    我有言在先,今天这个是猜测篇,没有经过证实,有一定可能是我的瞎猜= =,明天等我证实玩会做出相应的修改,把真相呈现出来= = 很多时候真的很想偷懒,但是没办法,虽然今天看了一下午lol季后赛的比赛,晚 ...

  2. Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?

    Android Activity为什么要细化出onCreate.onStart.onResume.onPause.onStop.onDesdroy这么多方法让应用去重载? 原创链接:http://bl ...

  3. Android Activity 生命周期中onStart()和onResume()的区别

    首先了解Activity的四种状态 Running状态:一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. Paused状态:当Activit ...

  4. 安卓activity生存周期的onCreate、onRestoreInstanceState、onRestart、onStart、onResume、onPause、onStop、onDestroy

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 每一个Activity的状态是由它在Activity栈中所处的位置所决定的, Activity其是当前所有正在运行的Activity的后进先出的集合. ...

  5. onCreate与onStart区别,onStart与onResume区别

    http://www.cnblogs.com/kofi1122/archive/2011/04/10/2011772.html Activity生命周期之我见 关于Activity生命周期的文章很多, ...

  6. Activity生命周期中onStart()和onResume()的区别

    Activity生命周期中onStart()和onResume()的区别 在讲onStart()和onResume()的区别之前,必须清楚Activity的四种状态: 1.Running状态:一个新的 ...

  7. Activity中onStart()和onResume()的区别

    分析了Android Activity中onStart()和onResume()的区别.分享给大家供大家参考,具体如下: 首先你要知道Activity的四种状态: ① Active/Runing 一个 ...

  8. 网络营销外包——网络营销外包前关键词排名反超首页的原因在哪里

    众所周知,在网站的整体页面中,可以说网站首页是网站中权重最高也是最有价值的一个页面了,如果站长们能够让网站首页的排名优化做好,相信能够为网站带来相当大的潜在流量,就连网站的核心关键词也能够有一个好的排 ...

  9. 点赋科技:淘宝关键词搜索不到是什么原因?

    这个问题应该是淘宝没有加入淘宝的推广.淘宝自动重定向部分用户网站,只显示参与淘宝推广的宝贝,设置类别的原因不是很正确,点赋网络科技建议您重新选择索引类别. 一.淘宝贝的关键词显示不全,为什么? 由于您 ...

最新文章

  1. 如何在HTTP POST请求中发送参数?
  2. 使用结构、数组、循环和DataGridView写的分数统计小程序
  3. 彻底关掉win10自动更新_win10系统explorer.exe错误的解决教程
  4. Python 使用 itchat+pillow 实现微信消息自动回复
  5. Linux快速计算MD5和Sha1命令
  6. 60-100-032-使用-MySQL大小写敏感的解决方法
  7. SLAM 建立局部二维栅格地图的一种方法
  8. AndroidStudio安卓原生开发_Activity的启动方法_隐式启动2种方法_activity关闭---Android原生开发工作笔记83
  9. 模糊逻辑学习--建立Mamdani系统(GUI)
  10. 【python-NOJ-季总结】—【第八季:Pandas库】—表格Dataframe的建立和使用
  11. matlab 定步长积分,数值积分:基于牛顿-柯茨公式的定步长和自适应积分方法 [MATLAB]...
  12. 服务器常见基本故障+排查方法,很实用!
  13. python如何退出while循环_python如何跳出while循环
  14. 我见过最“骚”的代码注释!神兽版都来了
  15. 捋一捋Python的文件处理(上)
  16. Ubuntu11.10安装科磊NW336驱动
  17. win10生成https证书步骤
  18. 小猫爪:汽车电子小知识02- ISO14229-1(UDS)简介
  19. 银行板块行情发令枪已打响12月7日天弘中证银行ETF发售1天
  20. 别用Docker了,这7大开源容器化工具也能满足你!

热门文章

  1. fastdfs详细安装教程
  2. 点击area不出现黑框_6种黑框玻璃门隔断,凭高颜值和实用性成为小户型新宠!...
  3. 滞后超前校正控制器的设计和matlab仿真 静态速度误差系数为10,自控实验六 基于频域的串联校正控制器设置 - GXUZF.COM - 林澈思的茶...
  4. 用python解算法谜题_编程的乐趣 用Python解算法谜题
  5. java 数据库操作代码_JAVA:对数据库的一系列操作代码
  6. 你知道面试必问的AOP吗,跟Java初学者分享几点经验
  7. 全网最细节的sds讲解,轻松拿下offer
  8. 使用java实现面向对象编程试题答案,面试题+笔记+项目实战
  9. 【Web安全】Payload的探索与Kali渗透测试框架-msf
  10. AVL的LL,RR,LR,RL调整