面向大众的移动技术,第3部分

为您的Android移动应用程序添加导航样式

安德鲁·格洛弗

2013年7月25日发布

面向大众的移动技术

请期待本系列的后续内容.

请期待本系列的后续内容.

近年来,移动应用程序发布和移动开发技术市场都在爆炸式增长. 本系列文章将向熟悉编程但对移动技术相对较新的开发人员介绍移动应用程序的开发. 首先使用Java™代码对本机应用程序进行编码,然后将该工具箱扩展为包括JVM语言,脚本框架,HTML5 / CSS / JavaScript,第三方工具等. 本系列文章将带您逐步掌握这些必要的技术,并实际处理所有移动开发方案.

现在,移动设备的功能异常强大,比许多开发人员用来编写其第一个程序的台式计算机要强大得多. 因此,很容易忘记移动设备仍处于资源有限的环境中. 在开发移动应用程序时,您绝不能忘记应用程序运行环境的限制. 尤其是当某个应用程序想要与其他应用程序竞争系统资源时,其中某些应用程序对您的日常行为比您的行为更为重要.

确保应用程序流行的方法之一是确保其节省系统资源. 在Android中,使用和维护系统资源的机制是Activity类. 您对基本类的生命周期了解得越多(与Java Servlet非常相似),您就越有能力调整Android移动应用程序的资源使用率和性能.

我们将从快速了解Activity类的生命周期开始. 通过示例应用程序的演示,您将学习如何处理Android应用程序生命周期的每个阶段. 掌握了这些方法的原理后,您就可以明智地使用系统资源了. 然后更新演示应用程序的导航系统,并使用操作图标代替菜单按钮来实现用户交互. 图标在移动应用程序UI中是非常标准的,并且较新的Android设备(版本4.2.2及更高版本)已放弃选项菜单,而是使用操作栏. 知道如何将这些功能与您的Android移动应用程序集成将使您受益!

Activity的生命周期直接对应于Android移动应用程序的生命周期. 当用户与应用程序或运行该应用程序的设备进行交互时,Android平台将在Activity实例上执行回调. 当用户启动应用程序时,初始活动将执行定义的生命周期. 当应用程序进入后台时,它执行生命周期的不同阶段,而当应用程序关闭时,它执行另一个阶段. 显示了每个交互阶段的Android Activity生命周期.

Android移动应用程序生命周期包括四个阶段:

以下内容将描述每个阶段及其回调方法(可以在Activity实例内部实现).

如果您一直在关注本系列文章,那么您已经在本系列的第一篇和第二篇文章中创建了自己的演示应用程序. 如果没有演示应用程序,建议您先创建一个演示应用程序,然后再继续. 或者,您可以复制我自己的Overheard Word演示应用程序的Git库(请参阅参考资料).

在上一篇文章中,您使用了与启动Activity相对应的回调方法,即onCreate. 您可能还熟悉onStart和onResume,并且在启动时也调用了这两种方法. 现在,在“活动”生命周期的上下文中考虑这些方法.

在Eclipse Android开发环境中,选择Override / Implement Methods ...选项来轻松地重写方法,如图所示.

接下来,选择onStart和onResume方法:

现在像我一样使用Android Log类添加一些跟踪语句.

@Override

protected void onResume() {

super.onResume();

Log.d("overheardword", "onResume Invoked");

}

@Override

protected void onStart() {

super.onStart();

Log.d("overheardword", "onStart Invoked");

}

启动应用程序的实例,并通过LogCat查看日志以检查结果,如图所示.

Android拥有自己的日志记录系统android.util.Log. 使用此方便的类,您可以记录各种级别的日志(例如信息,警告,调试等),然后通过Android SDK随附的logcat工具查看日志. 在Eclipse中,您应该将LogCat视为可用于过滤标签和应用程序实例的选项卡. 只要将设备插入台式机或笔记本电脑的USB插座,LogCat还支持访问设备上的日志.

您可能已经猜到了onCreate将在首次加载应用程序时被调用android应用程序周期,并且在其他阶段的上下文中(例如,当应用程序进入后台并重新启动时)使用onStart和onResume更方便.

由于移动设备通常运行多个应用程序,并且它们以各种方式吸引用户的注意力,因此您的应用程序应该知道何时让另一个应用程序占据设备屏幕并使用更多资源. 有时,用户在使用该应用程序时需要接听电话,否则该应用程序可能会弹出一个对话框,例如信息请求或错误消息. 上述每个操作都会部分阻止当前的活动.

当活动被部分阻止时,将调用onPause方法. 当暂停的活动重新获得焦点时,将调用onResume. 暂停和恢复表明受影响的活动被部分阻止,而不是完全隐藏.

当应用程序被完全隐藏(例如,用户调用)时,也会调用onPause,但在这种情况下,它将继续调用onStop. 当应用程序再次进入前台时,它将首先调用onRestart,然后调用onStart,最后调用onResume.

以下内容说明了实现onPause,onRestart和onStop时发生的情况. 如果本系列文章中已经使用了Android应用程序,请在代码中添加一些日志语句,然后运行该应用程序. 按“主页”按钮完全隐藏该实例,然后单击其图标以再次运行它. 您应该看到一系列称为的方法. 您看到的第一件事是onPause,然后是onStop. 单击图标重新运行应用程序时,调用的方法是onRestart,onStart和onResume.

破坏活动也是在运行应用程序的正常过程中发生的事情. 例如android应用程序周期,您可以调用Activity实例的finish方法来终止该实例. 这里的关键在于,由于活动是封闭的,因此它将遵循与隐藏相同的生命周期,但最终将回调onDestroy.

在其中,我使用了Overheard Word应用程序(请参阅“面向公众的移动技术: 轻扫!”或从Github获取资源)来演示该过程,当手势向上滑动Finish方法时将调用该过程.

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

try {

final SwipeDetector detector = new SwipeDetector(e1, e2, velocityX, velocityY);

if (detector.isDownSwipe()) {

return false;

}else if (detector.isUpSwipe()) {

finish();

}else if (detector.isLeftSwipe()) {

Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();

}else if (detector.isRightSwipe()) {

Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();

}

} catch (Exception e) {

// nothing

}

return false;

}

最常用的Activity生命周期方法是onCreate,onRestart和onDestroy. 例如,我使用onRestart刷新应用程序UI视图的许多方面之一,并使用onDestroy释放到的连接,例如在Android设备上本地运行的SQLite.

现在可能并不明显,但是一旦您开始与外部资源(例如外部Web服务或设备的文件系统或)协作,这些生命周期阶段将变得非常重要.

接下来,说明如何使用两个Activity钩子方法onCreateOptionsMenu和onOptionsItemSelected来实现应用程序菜单行为. 同步完这两种方法后,我们会将它们的功能连接到图标上,以实现其他UI效果.

当我在Eclipse中创建Overheard Word项目时,定义的第一个活动在onCreateOptionsMenu上有一个存根方法. 您可能会猜到,此方法用于创建选项菜单. 在较旧的Android设备上,选项菜单由“菜单”按钮表示. 在较新的设备上,它表示为在应用程序本身中显示的一系列垂直点. 较新的Android设备不一定具有菜单按钮.

在代表旧设备的的示例中,有一个名为“菜单”的按钮. 单击后,应用程序实例将显示选项菜单. 在此示例中,我们将看到导航选项. 例如,如果用户按下“主页”按钮,他们将看到显示的内容.

平板电脑上没有菜单按钮. 用户无法从菜单中选择项目,但被要求启动各种操作. 较新的UI栏称为操作栏,如图所示.

尽管菜单按钮的行为与操作栏相似,但操作栏只能在较新的设备上实现. 由于我们的目标是Android系统的旧版本(请记住,大约50%的Android设备运行Gingerbread!),因此我将使用更加熟悉的菜单按钮进行演示. 稍后,我将说明如何更新导航代码以实现操作栏,以满足您针对较新版本的Android和相应设备的需求.

为了翻新Overheard Word以提高用户交互的效率,第一步是实现选项菜单,以便用户可以退出应用程序. 退出应用程序是Activity生命周期的阶段之一,因此我们将使用Activity方法来实现此功能.

请记住,在Android应用程序中,所有与UI相关的业务都对应一个XML文件,因此定义UI的方法是编辑布局XML文件. Android应用程序的XML文件位于项目的res文件夹中的特定目录中(例如,布局文件位于布局目录中).

作为快速练习,您可以查看Overheard Word主要活动中onCreateOptionsMenu方法的默认实现-您看到了什么?

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.overheard_word, menu);

return true;

}

如果您要在菜单资源目录中查找名为overheard_word.xml的XML文件,那么您距离成为Android专家还很近!

接下来,我们将编辑菜单资源XML文件并添加一个名为quit的菜单项. 您首先需要在res / values目录中找到strings.xml文件. 找到它之后,创建一个新项目,如下所示:

Quit

此标记定义了退出这个词,可以由标识符quit_menu引用(顺便说一句,这对于应用程序的国际化非常有用). 接下来,在菜单目录中打开overheard_word.xml文件. 在此文件中,将标题更改为@ string / quit_menu以将单词Quit链接到菜单项.

现在,启动,然后按菜单按钮. 您应该看到一个菜单出现在屏幕底部,带有一个选项: 退出. 但是选择它没有效果,因为它尚未实现.

我们将在一分钟内添加Quit选项的实现代码. 但是首先,我们必须考虑移动应用程序任何功能部分的另一个重要元素,即外观. 您可能已经注意到,大量的移动UI(甚至越来越多的Web应用程序UI)现在都使用图标进行导航. 下面说明了如何用免费图标替换通用单词按钮.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-261493-1.html

android中应用程序生命周期,Android应用程序生命周期中的活动和图标相关推荐

  1. 国内android应用商城中程序隐私泄露分析,基于数据生命周期的Android应用程序隐私泄露分析技术研究...

    摘要: 目前,随着智能手机应用市场的发展与成熟,用户在方便地使用各类型应用的过程中亦会产生大量隐私数据,隐私泄露已成为智能手机平台的一个严重安全问题.由于Android平台的开放性,该问题更为突出,不 ...

  2. android应用程序的生命周期,Android应用程序的生命周期.doc

    Android应用程序的生命周期.doc Android应用程序的生命周期 描述:程序的生命周期是在Android系统中进程从启动到终止的所有阶段,也就是Android从启动到停止的全过程.==程序的 ...

  3. android中的横竖屏切换,Android中横竖屏切换时Activity的生命周期

    Android中横竖屏切换时Activity的生命周期执行情况 1.默认情况下生命周期 (1)第一次进入界面 11-17 13:55:18.452: E/ImageListActivity(10586 ...

  4. android启动服务的生命周期,android Service启动运行服务 生命周期

    Service Android中的service类似于windows中的service,service一般没有用户操作界面,它运行于系统中不容易被用户发觉, 可以使用它开发如监控之类的程序. 一.步骤 ...

  5. Android Fragment详解(二):Fragment创建及其生命周期

    Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...

  6. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. android自定义view生命周期,android基础之自定义view

    一.Custom View 1.view的继承关系 view继承关系.png 2.Android 如何绘制试图层次 当activity获取焦点时,它必须提供layout层次的根节点,然后android ...

  8. Android(java)学习笔记114:Service生命周期

    1.Service的生命周期         Android中的Service(服务)与Activity不同,它是不能和用户交互,不能自己启动的,运行在后台的程序,如果我们退出应用的时候,Servic ...

  9. Activity生命周期Android,横屏切换不重新创建Activity, Activity的四种launchMode

    Activity生命周期 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其 ...

最新文章

  1. 人工智能28个常见术语,别再说你不懂AI了!
  2. 程序员 - 爱的表白
  3. Python基本类型-字典
  4. .NET Core on K8S 学习与实践系列文章索引 (更新至20191116)
  5. 360容器平台监控实践
  6. 【英语学习】【WOTD】disparage 释义/词源/示例
  7. 周末ROS学习沙龙第二期——自定义消息通信、视频传输、人脸检测、小车动手编程
  8. 批量解决win10图标上有两个蓝色箭头的方法
  9. 为已经安装nginx添加php模块,安装成功的nginx如何添加未编译安装模块
  10. mysql 外键详解_mysql 中的外键key值的详解
  11. css 六角形_创建数字六角形瓷砖图(第1部分)
  12. matlab 产生时域波形,matlab时域波形图
  13. 产品和运营区别是什么,别迷惑了。
  14. 京东炸年兽脚本--亲测有效 2021最新版
  15. 文心一言——何妨吟啸且徐行
  16. edge浏览器怎么关闭广告的方法教程
  17. 组合游戏 - SG函数和SG定理
  18. 修改mysql数据库密码
  19. c语言结构体编辑学生成绩管理,C语言基于结构体的学生信息管理系统实现
  20. linux wifi 源代码,MTK MT7601 WIFI AP linux driver source code - 源码下载|嵌入式/单片机编程|嵌入式Linux|源代码 - 源码中国...

热门文章

  1. 东野圭吾梦幻花读后感_《梦幻花》-东野圭吾 读后感
  2. 静电保护元器件,在便携式电子产品中的应用
  3. DateTime.Now.ToString(yyyy/MM/dd) 输出的结果是 2006-03-16
  4. LocalDate 获取两个日期之间的天数
  5. 国瀚实业|上班族怎么选择理财产品
  6. 资源汇整:53套免费的扁平化Icon设计
  7. 图片数据扁平化的方法
  8. Bootstrap弹性布局Flex
  9. PHP 二维数组拆分
  10. 华为设备IPSec配置命令