这是我参加8月更文应战的第6天,活动概况查看:8月更文应战

本章叙述 Activity 生命周期、状况以及状况切换时体系调用的办法。

《Android编程威望攻略》之Activity的生命周期篇

《Android编程威望攻略》之Activity的生命周期篇

  • Nonexistent 标明 activity 不存在了,看不见了,它没有在内存里,或许现已被毁掉了,也没有相关的视图供用户查看或与之交互。(产生在点击了后腿按钮)
  • Stopped 标明 activity 在内存中具有实例,但其视图在屏幕上不可见。(产生在建议了别的的全屏 activity,或许点击了手机的主页按钮)
  • Pa实例化used 标明 activity 在前台不能与用户交互但视图可见或部分可见。(比如说跳出一个对话框)
  • Resumed 标明在内存中,彻底可见且在前台的 activity。在任何给定时间,整个体系中只需一个活动能够处于 resumed 状况。 这意味着,如果一项活动进入 resumed 状况,则另一项 activity 或许会退出 resumed 状况。

Activity 类会供给许多回调,这些回调会让 Activity 知晓某个状况现已更改。

一般,通过掩盖 onCreate(Bundle)动画制作软件 办法,activity 能够预处理以下 UI 相关作业:

  • 实例化组件并将它们放置在屏幕上(调用setCont实例化目标有几种方式entView(int)办法);
  • 引证已实例化的组件;
  • 为组件设置监听器以处理用户交互;
  • 拜访外部模型数据。

日志跟踪了解 activity 生命周数组

介绍的 android.util.Log 类打印日志,在上一章 MainActivity.kt 的上方加上日志 TAG 界说,然后,在 onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy() 生命周期回调办法中别离打印日志。

private const v像素地牢al TAG = "MainActivity"
class MainActivity : AppCompatA数组去重办法ctivity() {
...
override fun onStart() {
super.onStart()数组词
Log.d(TAG, "onStart() called")
}
...
}

建议 app 日志:

《Android编程威望攻略》之Activity的生命周期篇

点击 Home 键日志:

《Android编程威望攻略》之Activity的生命周期篇

从头进入 a数组指针pp 日志:

《Android编程威望攻略》之Activity的生命周期篇

旋转 app 日志:

《Android编程威望攻略》之Activity的生命周期篇

退出 app 日志:

《Android编程威望攻略》之Activity的生命周期篇

设备装备与 Activityandroid的drawable类 生命周期

旋转设备会改动设备装备(deviandroid下载安装ce configuration)。设备装备实践是指屏幕方向、屏幕像素密度、屏幕尺寸、键盘类型、言语等。数组函数的使用办法

在运行时装备改动(runtime configuration动画片少儿小猪佩奇 change)产生时,或许会有更适宜的资源来匹配新的设备装备。所以,Android动画片少儿小猪佩奇毁掉当时activity,为新装备寻找最佳资源,然后创立新实例运用这些android什么意思资源。(在demo中,再创立了一个layout目录,并加了后缀-land,res/layout-land,所以效果是设备处于水平方向时,Android会找实例化一个类到并运用res/layout-land目录下的布局资源)

Android的装备修饰符列表及其代表的设备装备信息网址:dev数组指针eloper.android.com数组指针/guide/topic…

UI 更新和多窗口办法

Android 7.0 之前,一般运用 onResume() 和 onPause() 来建议或许中止任何与 UI 相关的正在进动画片猫和老鼠行的更新(动画和刷新数据)。
Android 7.0 之后,有了多窗像素地牢口办法,现已暂停的 activity 也是可见的状况,我们是希望现已暂停的 activitiy 也体现的像正常活动相同像素画
比如说看视频的时分,不过我们能够在将恢复播映和暂停的播映移至像素地牢 onStart() 和 onStop() 中,这样就能满足需求了。

再探 activ动画片小猪佩奇ity 生命周期

protected void像素 onSaveI像素勇士大创造攻略nstanceState(Bundle outState)【像素射击该办法一般在 onStop() 办法之前由体系调用,除非用户数组词按撤离键。(记住,按撤离键便是告知 Android,activity 用完了。随后,该 activity 就彻底从内存中被抹实例化一个类掉,天然,也就没有必要为重建保存数据了。)】【 Bundle 是存储字符串键像素与束缚类型值之间映射联系(键-值对)的一种结构】

所以,动画图片头像可通过掩盖 onSaveInstanceState(Bundle) 办法,将一些数android/yunos据保存在 bundle 中,然后在 onCreate(Bundle) 办法中取回这些数据,处理旋转问题。

留意,在 Bundle 中存储和恢复的数据类型只能是底子类型(primitive type)以及能够完结 Serializable 或 Parce像素生计者2lable 接口的政策。在 Bundle 中保存定制类政策不是个好主意,由于你取回的政策或许现已没用了。比较好的做法是,通过其他办法保存定制类方动画数组词,而在Bundle中保存动画片小猪佩奇标识政策的底子类型数据。

《Android编程威望攻略》之Activity的生命周期篇

深入学习:activity 内存整理现状

低内存状况下,android电子市场Android直接从内存铲除整个使用进程,连带使用的全部activity。现在,Andr实例化数组oid还做不到只毁掉单个activity。

这儿还介绍了运用Android手机中开发者设置,启用 Don’t keep activities

单击撤离键后,体系总是会毁掉当时的activity,相当于告知体系“用户不再需求运用当时的activity”。

深入学习:日志记载的等级与办法

当然,打印日志也是有等级的,一实例化般打过错日志才用 Log.e,默许是赤色,打出来很显眼,但是往常一些信息什么的,最好不要动画片猫和老鼠打到这个等级了,很影响排除过错。

《Android编程威望攻略》之Activity的生命周期篇

关于日志打印:实例化servlet类异常www.ji数组排序anshu.com/p/de79bbf35…

应战操练:阻止一题多答

  1. 界说android的drawable类问题是否现已答复过问题的 boolean 类型的数组
private var mQuestionsAnswered: BooleanArray? = BooleanArray(questionBank.size)
  1. 写个数组指针办法专门用来设置答题按钮状况
priva像素射击下载te数组 fun setBtnEnabled(enabled: Boolean) {
trueButton.isEnabled = enabled
falseButton.isEnabled = enabled
}
  1. 每一次查看问题答案的时分,立即将答题按钮状况置为 false,并将是否答复过问题的 boolea实例化目标是什么意思n 数组当时方位的android下载值设置为 t动画片汪汪队rue,因此在 checkAnswer 办法里面加上两句代码
p实例化类rivate fun checkAnswer(userAnswer: Boolean) {
...
setBtnEnabled(false)
mQuestionsAnswered?.se像素射击下载t(currentIndex,android电子市场 true)
}
  1. 每一次翻页都要更新当时问题是否答复过的按钮状况,所以updateQuestio动画图片头像n() 办法中增加代码
private fun updateQuestion()数组词 {
...
setBtnEnabled(!mQuestionsAnswered?.get(currentIndex)!!)
}
  1. 为了处理旋转问题,所以是否答复过问题的数组也要坚持下来,界说一个KEY,再在 onSaveInstanceState() 保存数组
private const val KEY_QUESTION_ANSWERED = "answered"
override fun onSaveInstanceState(savedInstanceState: Bundle) {
...
savedInstancandroid/yunoseState.putBooleanArray(KEY_QUESTION_ANSWERED, mQuestionsAnswered)
}
  1. 毕竟当然也要在onCreate办法中得到刚刚保存的是否答复过问题的数组,处理旋转初始化值的问题
if (savedInstanceState != null) {
currentIndex = savedInstanceState动画.getInt(KEY_INDEX, 0)
mQuestionsAnswered = savedInstanceStatandroid平板电脑价格e.getBooleandroid是什么手机牌子anArray(KEY_QUESTION_ANSWERED)
}

应战操练:评分 (用户答彻底部题后,闪现一个toast消息,给出百分比办法的评分)

  1. 界说一个 Int动画片小猪佩奇动画制作软件型的数,记载答复正确答案的个数,初始化为 0
 private var mTrueAnswerCount = 0
  1. 每次点击了答复问题的按钮,检测答案的时像素生计者2分,查看正确了,就将mTrueAnswerCount ++
private fun che动画ckAnswer(userAnswer: Boolean) {
val correctAnswer = questionBank[currentIndex].answer
val messageResId = if (userAnswer == correctAnswer) {
mTrueAnswerCount++
R.像素危城str动画片小猪佩奇ing.corr像素画ect_toast
} else {
R.string.incorrect_toast
}
Toast.makeTe像素画xt(this, messageResId,数组去重办法 Toast.LENGTH_SHORT).show()
setBtnEnabled(false)
mQuestionsAnswered?.实例化需求set(currentIndex, true)
getScoreResult()
}
  1. 写个得到评分的办法,一贯在想,什么时分会答完题,由于能够跳着答题的嘛,刚好答完像素全部就跳出提示,所以我的处理是在 checkAnswer()办法的毕竟,都会调用一下得到评分效果的办法,而在 getScoreResul像素生计者2t() 办法里面判别一下当时是否答完了全部题,数组排序没有不作任何处理,答完了就做核算弹出当时评分的百分比
private fun getScoreResult() {
var isAllAnswered = true动画头像
for (i in questionBank.数组公式indices) {
i动画专业f (!mQuestionsAnswered?.动画制作软件get动画片少儿小猪佩奇(i)!!) {
isAllAnswered = false
return
}
}
if (isAllAnswered) {
Toast.像素射击下载makeText(
this,
"${mTrueAnswerCount * 100 / questionBank.size} %",
Toast.LENGTH_LONG
).s动画片猫和老鼠how()
}
}
  1. 数组转字符串究一个旋转问题,当然又是界说一个key,保存当时答复正确的问题数喽
pri像素工厂vate const v数组和链表的区别al KEY_TRUE_ANSWER_COUNT = "true_answer_count"
mTrueAnswerCount = savedInstanceState.getInt(KEY_TRUE_ANSWER_COUNT)
savedInstanceState.putInt(KEY_TRUE_ANSWER_COUNT, mTrueAnswerCount)

OK!结束!ヾ(◍∇◍)ノ゙