Android Activity 各函数解析

  次阅读 来源:互联网(转载协议) 2016-01-14 10:40 我要评论(0)

Activity类在Android操作系统的应用中是常重要的。那么如何才能正确的在应用中来操作这一类呢?在一个应用中,每一个显示的屏幕都是一个Activity。所以学习Android,必须要对Activity有一定的了解。在其他论坛中也有一些关于Activity的介绍,我在这里就想谈谈我对Activity学习的一些看法。首先Activity的生命周期很重要,Activity主要包含六个方法,分别是onCreate,onStart,onResume,onPause,onStop,onDestory。

onCreate和onDestory对应。onStart和onStop对应,onResume和onPause对应。

这几个函数大概是这样定义的,当启动一个Android Activity类的时候,onCreate方法首先会被启动,然后接着是onStart和onResume,也会启动,一般地,等这几个函数都启动完了之后你这个Activity就可以被显示出来了。当然我这里说的是一般的情况,如果你要是在这三个函数初始化的时候启动了一个后台的Service,那么还要等待ServiceConnection执行完毕才能够被显示出来,这里可能有人要问什么是Service了,在以后我会介绍它,这里大家就先了解下Service的回调函数也会影响Acitivity的启动就可以了。

这是Activity启动时会调用的三个函数,在Acitivity销毁的时候会调用onPause,onStop,onDestory。当调用完onDestory之后,你的Acitivity也就被销毁完毕了,这时候你在调用Activity的isFinishing的时候,就会返回true,但是此时Activity的this指针还可以被使用,如果你在Activity单起一个线程做其他事情的话,那么上下文变量context指针还是能够被使用的。

当然Android Activity类有可能还处于其他状态,不一定就是被显示或者被销毁,很有可能这个Activity启动了另一个Activity,这个时候前先的那个Activiy就会被放到系统的堆栈中,等被启动的Activity返回的时候,它又重新被显示出来,这个流程是这样的,一个Activity启动了另外的一个Activity,那么它就会调用onPause函数,进入一种停滞的状态,然后被启动的Activity被销毁返回后,又会调用onResume函数。

对于Activity的这种机制,我感觉在初始化的工作最好放到一个自己定义的一个接口中,因为由于Activity状态的改变,你的Activity的Layout就有可能会被改变。说到这里就要谈一下什么叫做Layout,每个Activity的界面的布局就是一个Layout,每个Activity都要有这样一个布局它才能够被显示出来,一般地,我们都会把一个Layout放到一个XML文件当中,然后直接调用Activity的setContentView函数来填充这个Activity,如果Layout不放在xml文件中,也可以用代码生成一个动态的Layout,也就是说用Activity。

this指针生成一个Layout。这个给大家推荐一个非常好用的工具叫做droiddraw,论坛里就有链接,站长好像发过贴。这个工具非常好用,不用看教程半小时就能学会,上面有一些特定的控件,把控件摆好布局后直接能生成xml文件。把这个xml文件放到项目的res/layout文件夹下面就可以了。生成好Layout文件后,你就要为你程序要用到的一些控件设定ID,具体怎么设定大家可以在google的Android主页里有,叫gettingstarted,那个写得很明白,我就不跟这里重述了。

接下来还是谈下Android的这几个主要的函数,我还有些建议就是在onCreate函数中尽量少写代码,把尽肯能多的东西放到onResume和那个自定义的初始化函数里去写,onResume这个函数被调用的几率是非常高的,这里大家在模拟器上开发可能没有感觉到onResume的重要性,在真机上测试就会发现,当屏幕变黑进入等待状态,然后你手动恢复屏幕变亮时也会进入onResume状态,所以我感觉把一些刷新控件的方法放到onResume函数中来做还是非常必要的。onPause,onStop,还有onDestroy函数都是用来做一些清理工作的,比如说一些变量要被释放,一些线程要被停滞等等都可以放到这里来做。

下面我来总结一下Android Activity类一个大概的设计思路:

首先设计一个方法,这个方法主要作用就是初始化Activity的控件,进行各种条件判断,对Acitvity来进行不用的布局初始化,这里举个例子来解释下为什么要初始化不同的布局,例如你的这个Activity从SD卡读取了一些信息,那么当你拔出SD卡的时候这些信息肯定也就没有了,那么你就要进行另外的一个布局来显示这个Activity,这个时候你就可以重用这个函数来进行布局的初始化。

onCreate函数:注册你要用到的变量,比如说service,receiver,这些变量是无论你的Activity是在前台还是在后台都能够被响应到的,然后调用上面那个用来初始化的函数初始化布局信息。

onStart函数:注册一些变量。这些变量必须在Android Activity类在前台的时候才能够被响应。

onResume函数:调用一些刷新UI的函数,每当Activity调用到这里时就要刷新一下UI各控件的状态。

onPause函数:一般是做一些变量的设置,因为这个时候Activity马上就要切到后台处理,可能有些变量就要被释放掉或者状态要做些相应的调整。

onStop函数:反注册在onStart函数中注册的变量。

onDestory函数:反注册在onCreate函数中注册的变量。

上面谈了些Android Activity类的最常用的一些方法,当然还有很多方法没有谈到,有很多方法我也没有用过,其他方法大家可以参考google的文档。

接下来我来谈谈Activity中最简单的一些通信方法,这里我先定义两个名字为方便接下来的叙述,启动另外一个Activity的那个Activity我们称之为主Activity,被启动的那个Activity我们称之为子Activity。

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...