织梦CMS - 轻松建站从此开始!

山西头条

当前位置: 主页 > 小说 >

高级android开发实战

时间:2019-12-15 19:39来源:未知 作者:admin 点击:
全部实例代码都已经通过测试,从网络下载后,运行项目即可使用。读者在阅读本节时,需要提前下载源码,并调试通过,根据所讲述的内容运行代码,通过实战更好地学习本节知识。1.1.3 实例:因硬件导致的生命周期变化 我们在使用应用的过程中,除在应用内的交互
广告位API接口通信错误,查看德得广告获取帮助
全部实例代码都已经通过测试,从网络下载后,运行项目即可使用。读者在阅读本节时,需要提前下载源码,并调试通过,根据所讲述的内容运行代码,通过实战更好地学习本节知识。1.1.3 实例:因硬件导致的生命周期变化
我们在使用应用的过程中,除在应用内的交互外,通过手机的硬件按键,也能触发生命周期的改变。对于应用内的交互会导致页面的切换,则触发常规的生命周期状态的改变,从onCreate()到onDestroy()依次调用,这是基本的生命周期变化。除此之外,还需重点关注一些特定的硬件操作,比如用户按手机的菜单(Home)键和后退(Back)键。
对于一款基本的Android手机而言,手机底部都会包含两个基础的按钮,一个是位于中部的菜单键,另一个是位于右侧的后退键。因此,除了在应用内提供的交互场景,用户最常用的两种操作就是按菜单键或后退键。那么这两种常用的操作又会给Activity带来哪些生命周期的变化呢?下面通过实例来讲解。
先来看看应用的主页 - MainActivity.java,通过源码来分析这个Activity页面是如何组成的,如图1-4所示。[图片]图1-4 MainActivity
首先,声明TAG标签,作为Log输出的标签,用于在Logcat中过滤信息;使用ButterKnife插件,声明两个按钮,用于页面的跳转;声明EXTRA_TEXT标签,用于在Activity中模拟状态的存储。对于字符串静态常量,一般使用大写字母加下画线的形式表示。 注意:ButterKnife是由Jake Wharton编写的一个用于声明布局中控件的插件,代替调用findViewById()方法,节省了大量的开发时间。在项目目录中,添加ButterKnife的依赖即可使用。具体原理与使用方式可参考ButterKnife的官方网址https://github.com/JakeWharton/butterknife。
其次,onCreate()方法作为创建Activity的第一个调用函数,负责初始化Activity的全部行为,我们一般重点编写代码逻辑的部分。
代码如下:例如setContentView(),设置页面布局;ButterKnife.bind(),负责绑定ButterKnife并初始化,只有在初始化ButterKnife之后,才能调用Bind()标注进行布局ID的绑定;设置mBTranslucent按钮和mBSecond按钮的绑定事件;获取EXTRA_TEXT的状态存储信息及输出onCreate()方法的调用提示。在每个生命周期方法中,都添加了相应的调用提示,方便在Logcat中观察当Activity页面改变时,生命周期变化的整个过程。
代码如下:再次,在Activity的启动过程中,先调用onCreate()方法,然后依次调用onRestart()、onStart()、onRestoreInstanceState()、onResume(),其中onRestart()与onRestoreInstanceState()并不是每个生命周期都会调用的。
代码如下:最后,在Activity的关闭过程中,依次调用onPause()、onSaveInstanceState()、onStop()、onDestroy(),其中onSaveInstanceState()并不是每个生命周期都会调用的,只有页面完全不可视时才会调用,用于储存当前页面的状态,如果仅仅失去焦点则不调用。最终MainActivity页面的显示如图1-5所示。在页面初次启动时,MainActivity页面执行的生命周期依次为onCreate()、onStart()、onResume(),都是常规的生命周期流程。在执行onResume()方法之后,MainActivity页面已经具备与用户交互的功能。
[图片]
在按后退键时,MainActivity页面执行的生命周期依次为onPause()、onStop()、onDestroy(),也都是常规的生命周期流程。在执行onDestroy()方法之后,MainActivity页面已经完全销毁。
[图片]
但是,如果没有按后退键,而是按菜单键,MainActivity页面仅仅是由前台转入后台,并不会立即执行销毁。当用户再次使用时页面仍可快速启动。但是系统可能会在某个时刻自动销毁这个页面,如内存不足,这是Android系统的机制,防止后台页面过多,影响系统效率。
在按菜单键时,MainActivity页面执行的生命周期依次为onPause()、onSaveInstanceState()、onStop(),不会执行onDestroy()方法,也就没有释放系统资源,保证在下次启动时,仍可快速加载。调用onSaveInstanceState()方法的原因是系统可能在后台自动杀死当前Activity,所以需要保存当前页面的状态,如果系统这样做,再次调起页面时,系统也会自动调onRestoreInstanceState()恢复当前状态。在执行onStop()方法之后,MainActivity页面已经由前台转入后台,对用户不可视。
[图片]
在系统桌面中再次点击应用图标,应用又恢复为可交互状态,MainActivity页面执行的生命周期依次为onRestart()、onStart()、onResume()。由于间隔时间较短,系统资源较为丰富,系统未执行onDestroy()方法,强制杀死当前Activity,所以不需要调用onCreate()方法进行页面创建,也不需要调用onRestoreInstanceState()方法恢复状态。1.1.4 实例:页面切换时的生命周期变化
对于非透明页面,Activity的逻辑比较固定,执行完整的生命周期,但是对于透明页面略有不同,因为透明页面作为底部页面的浮层,底部页面仍然可视,所以不会执行销毁逻辑。为了验证全部的生命周期过程,下面通过实例,创建非透明和透明两个页面,验证在Activity页面切换时生命周期的变化情况。
基本的生命周期逻辑:在onStart()时,Activity页面对于用户可视,但是无法交互;在onResume()时,Activity页面不仅可视,而且可以交互,因此onResume()在onStart()之后触发;在onPause()时,Activity页面无法交互,而且必须在Activity页面的onPause()执行完成后,下一个Activity页面才能执行启动逻辑,如onCreate()或onResume();在onStop()时,Activity页面对于用户不可视。
注意:在onPause()中,不能执行复杂的操作,否则会影响下一个Activity的启动速度。
从非透明页面讲,首先创建一个简单的非透明页面,此页面的创建生命周期仅含有onCreate(),销毁生命周期全部包含,即onPause()、onStop()、onDestroy()。首先,执行在MainActivity中启动非透明页面SecondActivity,即由当前Activity页面切换至另一个非透明的Activity页面,导致当前页面销毁,新的页面被创建。在MainActivity页面的onPause()执行完成后,SecondActivity页面才能执行启动逻辑,SecondActivity启动完成后,才会执行MainActivity页面的剩余销毁工作,如onSaveInstanceState()和onStop()。因为当前Activity页面仍在Activity栈中,并未出栈,则并未执行onDestroy()的方法。 (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
广告位API接口通信错误,查看德得广告获取帮助
推荐内容
  • 网页制作教程

    [图片]第1章 网页制作基础 【情景导入】 小白在一家网页制作公司开始了她的实习生活。...

  • Javascript权威指南

    第一部分 JavaScript语言核心 第1章 JavaScript概述 Javascript是面向web的编程语言,...

广告位API接口通信错误,查看德得广告获取帮助
广告位API接口通信错误,查看德得广告获取帮助