Android是在onCreate还是onStart中初始化数据的选择

安卓的生命周期就不复述了,简单复习下:


不难看出,其实这些方法都是两两对应的,onCreate创建与onDestroy销毁;onStart可见与onStop不可见;onResume可编辑(即焦点)与onPause;这6个方法是相对应的,那么就只剩下一个onRestart方法了,这个方法在什么时候调用呢?答案就是:在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;如果被onDestroy了,则是调用onCreate方法。

如果所有的初始化都在onCreate()中实现,会有什么问题?

    首先,Activity的onCreate()被调用时,Activity还不可见,如果要做一些动画,既然视图还不存在,在onCreate中来启动动画,明显有问题;

    其次,AActivity 切换到 BActivity,再切换到 AActivity(我们假定是AActivity的同一个实例),由于实例已经存在,所以onCreate不会再被调用,那AActivity从后台切换至前台时,有可能需要一些初始化,那就没法再被调用到了,也有问题;


如果所有的初始化都在onStart()中实现,会有什么问题?

    首先,onCreate()注释中,是明确建议 setContentView()、findViewById() 要在 onCreate() 中被调用,但我实测了一下,在onStart()中调用 setContentView()、findViewById() 功能也是正常的;

    其次,onStart() 被调用时,Activity可能是可见了,但还不是可交互的,onResume()的注释中都明确地说了这不是Activity对用户是可见的最好的指示器,onStart() 在这之前被调用,那有一些特殊的初始化相关的逻辑在这里被调用也会有问题。


如果把所有的去初始化都在onStop()中实现,会有什么问题?

    1、 在 onResume() 的注释中,建议是在onResume()中打开独占设备(比如相机),与onResume()对应的是onPause(),所以所有的去初始化操作放在onStop()中执行,可能会引出新的问题;

    2、onStop() 的注释中明确地写了,在内存不足而导致系统无法保留此进程的情况下,onStop() 可能都不会被执行。

    我的老Android手机相机应用如果未正常关闭,相机在不重启系统的情况下就无法再正常启动,估计就和这个机制有关;相机进程是被强制杀掉的,而导致去初始化操作未被正常执行。


文章转自:http://www.bubuko.com/infodetail_120329.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 基于Java的Android应用程序开发-24点游戏源码+详细项目说明.zip 【项目介绍】 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 项目简介 已知一副扑克牌有54张,去除大王和小王,剩余52张。在其抽取4张牌,利用加减乘除进行计算得到24,除法必须能够除尽。编写程序从一副扑克牌,选择4张,进行计算是否能得到24。如果可以,排序列出可能的计算表达式,可能有多种计算形式。 **实现功能** - 在界面上显示出52张扑克牌。 - 通过点击的方式选出4张扑克牌并放置在界面某一个地方,位置自己确定。 - 如果可以计算出24,排序列出可能的计算方式,并显示在界面上,如果不能算出,请提示。 - APP界面自行设计,至少包含两个界面。 - 界面美观度,功能完整度,扩展性功能,程序稳定性。 ## 2、项目实现 ### 2.1、设计思想 **卡片选取功能的实现方法:** “计算24点”上一共有56个ImageView,其有52个显示扑克牌,按照扑克牌的花色以及点数有序排列。界面下方4个ImageView为卡片空位。当点击扑克牌时,设置ImageView的clickListener将当前所点击的卡片设置为隐藏状态,并将下方的空白卡片图片设置为所选择的扑克牌。 程序使用一个容量为4栈用于存储当前所选择的卡片。当点击“back”时弹出栈上方的卡片,并将弹出的卡片对应的ImageView设置显示,并将界面下方对应的卡片设置为空白卡片,即实现了卡片的退出功能。当点击“clear”时清空栈,并同时设置对应的ImageView,即实现清空卡片功能。点击“get 24pints”时调用“Point24”类的“get24pointequ”函数获取24点表达式,并显示在弹窗上。若无法组成24点表达式,便提示用户。 **获取24点表达式的算法思路:** 首先从4个数字有序地选出2个数字,并选择加、减、乘、除 4 种运算操作之一,用得到的结果取代选出的2个数字,剩下3个数字。然后在剩下的3个数字有序地选出2个数字,并选择 4 种运算操作之一,用得到的结果取代选出的2个数字,剩下2个数字。最后剩下2个数字,有2种不同的顺序,并选择4种运算操作之一。 因此,可以通过回溯的方法遍历所有不同的可能性。使用一个列表存储目前的全部数字,每次从列表选出2个数字,再选择一种运算操作,用计算得到的结果取代选出的2个数字,这样列表的数字就减少了1个。重复上述步骤,直到列表只剩下1个数字,这个数字就是一种可能性的结果,如果结果等于24,则说明可以通过运算得到24。如果所有的可能性的结果都不等于24,则说明无法通过运算得到24。 除法运算为实数除法,因此结果为浮点数,列表存储的数字也都是浮点数。在判断结果是否等于 24 时需要考虑精度误差,当误差小于10-6 时可以认为是相等。 进行除法运算时,除数不能为0,如果遇到除数为0的情况,则这种可能性可以直接排除。 总结与体会 通过学习开发扑克牌计算24点app,了解了android studio开发的基本原理。学习了android程序的运行过程。一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程都会调用onCreate()。 接着是onStart(),系统会自动调用;但是,当需要在程序需要创建其他的activity的时候,需要显式调用这个onStart(),即startActivity(intent),这里的intent表示一个意图,就是想创建的新Activity。 还学习了android的一些基本组件,例如:id,控件的唯一表示符,在同一个XML文件不可重复,相当于身份证的作用,课用来寻找并且绑定此控件;layout_width以及layout_height,分别设置view的宽高;gravity指定当文本小于视图时如何通过视图的 x 和/或 y 轴对齐文本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值