物联网实训平台:Activity开发

实现登录功能
任务目标:
1.掌握Activity的创建
2.掌握Activity的启动和声明
3.掌握为按钮控件添加监听事件
任务陈述:
本任务使用单元2的任务7中的设计界面作为跳转后的界面。当用户在智慧城市登录界面点击登录时,页面跳转到智慧城市的主界面。本任务主要是完成Android中两个页面之间的跳转功能。
任务学习:
1.Activity简介:
Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一[1] 。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。
2.Activity的创建:
如何创建一个Activity:必须创建一个Activity的 子类,在子类中需要实现Activity状态在生命周期中切换时系统回调的函数(onCreate、onStart、onResume、onPause、onStop、onDestroy),当然并非所有的函数都需要重新实现。其中两个比较重要的函数为onCreate和onPause:
onCreate(),此方法必须要重写。系统调用此方法创建activity,实现该方法是你初始化你所创建Activity的重要步骤。其中最重要的就是调用 setContentView() 去定义你的要展现的用户界面的布局。
onPause(),当系统任务用户离开此界面时会调用此方法,此时并非销毁一个Activity。通常在这里就要处理一些持久超越用户会话的变化,比如:数据的保存。
为了保证流畅的用户体验和处理,你可以调用其他的回调函数来使你的Atctivity停止或销毁。在onStop()方法中,一般做一些大资源货对象的释放,如:网络或者数据库连接。可以在onResume时再加载所需要资源。


创建Activity

一个Activity创建完成后,为了它可以访问系统必须要声明注册它到应用的AndroidManifest.xml文件中:


image.png

3.Activity的跳转:
通过调用startActivity(intent)启动Activity,intent用来准确的描述你要启动的Activity。
image.png

4.基于监听事件的处理机制:
android对监听事件的处理可以分为4种:
第一种:内部类作为事件监听器类
内部类有两种:分别为匿名内部类和不匿名内部类,其中大部分事件监听类都是使用匿名内部类。
其中的好处有:
1.可以在当前类中复用该监听器类
2.可以自由访问外部类的所有界面组件
第二种:外部类作为事件监听器类
比较少见,其中优点为:
1.当某个事件监听器被多个GUI界面共享,且主要是完成某种业务逻辑的实现
其中确定为:
1.不利于提高程序的内聚性
2.不能自由访问创建GUI界面类的组件,编程不够简洁

第三种:Activity本身作为事件监听器
可以直接在Activity中定义事件处理方法
其中优点为:非常简洁
缺点为:
1.这种形式可能造成程序结构混乱。Activity的主要职责应该是完成界面初始化;但此时还需包含事件处理器方法,从而引起混乱
2.如果activity界面类需要实现监听器接口,让人感觉比较怪异。
第四种:直接绑定到标签
在布局中要发送事件源中定义一个:
android:onClick="clickHandler"
然后在该布局对应的Activity定义一个 void clickHandler(void source)方法。
1.复习并通过单元2所学习的知识在res/layout文件夹中新建activity_login.xml文件,完成登录界面和主界面的设计,如图3-1和图3-2所示。


登录界面

image.png

2.在src文件中新建LoginActivity类,并重写Oncreat()方法。
3.声明一个按钮控件并通过通过findViewById找到布局中的界面再强制传唤成Button类型赋值给mBtnLogin绑定控件设置按钮的单击事件。
4.在AndroidManifest.xml中定义声明Activity。
通过代码可以理解Acitvity的跳转与为按钮添加监听事件的过程,充分理解了一个带界面的android应用程序可以由一个或者多个Activity组成,至于这些Activity是如何工作的或者他们之间有什么依赖关系,则完成取决于应用程序的业务逻辑。每个Activity都会有一个窗口,在默认情况下,这个窗口是充满整个屏幕的,也可以将窗口变得比手机屏幕小,或者悬浮在其他窗口上面。

主页面的生命周期
任务目标:
1.掌握Activity的生命周期
任务陈述:
本任务使用单元2的任务7中的界面设计,用日志输出的方式,展现Activity各个生命周期。
Activity的生命周期:
在Acivity从创建到销毁的过程中需要在不同的阶段调用7个生命周 期的方法。这7个生命周期方法定义如下:
Protected void onCreat(Bundle savedInstancedState)
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
Protected void onStart()
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
Protected void onResume()
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
Protected void onPause()
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
Protected void onStop()
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
Protected void onRestart()
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
Protected void onDestroy()
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
上面的7个生命周期方法分别在4个阶段按一定得顺序进行调用,这4个阶段如下:
1.开始Activity:在这个阶依次执行3个生命周期方法,分别是onCreat、onStart和onResume。
2.Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,当前的Activity会失去焦点。在这一阶段会依次执行onPause和onStop方法。
3.Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个生命周期方法,分别是onRestart、onStart和onResume。
4.关闭Activity:当Activity被关闭时系统会依次执行3个生命周期方法,分别是onPause、onStop、onDestory。
如果在这4个阶段执行生命周期方法的过程中不发生状态的改变,系统会按上面的描述依次执行这个4个阶段中的生命周期方法,但如果在执行过程中改变了状态,系统会按更复杂的方式调用生命周期的方法。
在执行的过程中可以改变系统的执行轨迹的生命周期的方法是onPause和onStop。如果在执行onPause方法的过程中Activity重新获得了焦点,然后又失去了焦点,系统将不会再执行onStop方法,而是按照如下顺序执行相应的生命周期方法:
onPause -> onResume -> onPause
如果在执行onStop方法的过程中Activity重新获得了焦点,然后又失去焦点,系统将不会执行onDestroy方法,而是按如下顺序执行相应的生命周期方法:
onStop -> onRestart -> onStart -> onResume -> onPause -> onStop
下图描述了Activity从创建到销毁以及中间状态的改变后调用生命周期方法的过程


image.png
  1. 新建项目工程引用单元2任务7的界面文件实现界面设计,如下图所示。


    image.png
  2. 修改ActivityDemo7.java重写以上的七种方法,主要用Log打印代码。
  3. 运行上述工程,效果图如下图所示(没什么特别的)。


    image.png

    在Window->Show View会出来一个对话框,如图3-6,当我们点击Ok按钮时,会在控制台窗口出现LogCat视窗如图3-7所示:


    image.png

    image.png

    image.png

    当我们打开应用时先后执行了onCreate()->onStart()->onResume三个方法,看一下LogCat视窗如下所示:


    image.png

    当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法,如下所示:
    image.png

    当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。如下所示:
    image.png

    而当我们再次启动ActivityDemo7应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法,如下所示:
    image.png

    调用系统功能

    任务目标:
    1.掌握Android系统的信使:intent
    2.掌握Activity的隐式启动
    任务陈述:
    当用户点击拍码购物的按钮后系统调用照相机功能进行二维码扫描。
    Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。
    Intent有以下几个属性:
    动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中Intent中的四个重要属性——Action、Data、Category、Extras
    1.Intent的Action属性
    Action是指Intent要完成的动作,是一个字符串常量。Intent也内含了很多默认的action。
    2.Intent的Data属性
    Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配。
    3.Intent的Category属性
    Intent中的Category属性是一个执行动作Action的附加信息。比如:CATEGORY_HOME则表示放回到Home界面,ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个。

  4. Extras属性主要用于传递目标组件所需要的额外的数据。通过putExtras()方法设置。常用值如下所示:
    任务实现:
    1.在Elipse下新建命为AndroidDome3_2的Android项目。
    2.修改res/layout文件夹下的activity_main.xml文件,进行如下图界面设置。


    image.png

    3.声明Button控件,和拍照标识。
    4.修改src目录下的MainActivity.java文件,并自定义一个initView()方法实现控件的初始化,同时为按钮添加监听事件。
    5.实现调用系统自身照相机功能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容