• Android四大组件之Activity


    实验内容

    • 了解Activity的四个状态
    • Activity的生命周期
    • 启动另外一个Activity

    实验要求

    • 编码实现观察Activity的生命周期函数执行过程
    • 编码实现启动另外一个Activity

    实验步骤

    一、什么是Activity

    Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。
    每一个Activity被给予一个窗口,在上面可以绘制用户接口。
    窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。

    在一个应用程序中通常由多个Activity构成,新建的工程都会在Manifest.xml中指定一个主的Activity

    二、Activity的四个状态

    • Active/Runing
      它显示在屏幕最前端,处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态。
    • Paused
      窗口可见,只是失去焦点,不可以和用户交互。
      例如出现透明的悬浮窗口。
    • Stoped
      窗口被隐藏,不再可见,依然保持所有状态和成员信息。
      一般的Android应用退出,就会处于这种状态。
    • Killed
      从内存中删除Activity。
      有两种方式删除。系统直接结束进程;要求Activity结束。

    三、Activity的7个方法

    • 1、onCreate
      当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。
    • 2、onStart
      该方法的触发表示所属活动将被展现给用户。
    • 3、onResume
      当一个活动和用户发生交互的时候,触发该方法。
    • 4、onPause
      当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
    • 5、onStop
      当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。
    • 6、onRestart
      当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
    • 7、onDestroy
      当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。
    • onSaveInstanceState
      系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。
      通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息
      Activty的生命周期的也就是它所在进程的生命周期,包含以上七个方法,如下图所示:

    图2

    四、Activity栈

    每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。 当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。
    如果用户使用后退按钮返回的话,或者前台的Activity结束,活动的Activity就会被移出栈消亡,而在栈上的上一个活动的Activity将会移上来并变为活动状态。如下图所示

    图3

    五、Activity生命周期测试

    1、首先打开之前新建的HelloWorld工程,在MainActivity.java中添加如下代码:

    图4
    2、然后重新编译一下,如下图

    图4.1
    3、打开Android模拟器之后运行刚刚编译好的工程,然后打开下方的Logcat如下图所示

    图4.2
    4、经过一系列的打印信息之后我们可以找到日志显示系统,其中有我们在代码中写的信息。
    如下图所示
    ![](http://images2015.cnblogs.com/blog/820837/201604

    /820837-20160424193747929-774773283.png)

    图5
    我们可以看到应用开启后,系统分别调用了onCreate,onStart,onResume,当我们点击home键之后应用退出,再看Logcat的打印信息,可以看到依次调用了onPause,onStop,如下图

    图6
    当我们再次点击应用图标回到应用时,依次又调用了onStart,onResume是ing用再次重现,如下图

    图7
    当我们直接点击返回按键时,系统又依次调用了onPause,onStop,onDestroy使应用销毁,如下图所示

    图8
    通过以上信息,我们可以对应到图2的Activity生命周期,他们是吻合的。

    六、Activity的信息传递

    基本原理为:要实现从1个activity跳到另一个activity,这需要通过intent来实现。当然我们需要在Next按钮上绑定一个按钮按下的监听器,一旦该按钮监听到有按键按下,则通过intent将指定的第2个activity触发,这样就完成了本次试验的功能。

    1、首先为另外一个Activity设置布局,按照如下步骤新建一个布局文件

    图11

    图12
    按照下面修改代码

    图15
    2、新建一个Java类,命名为SecondActivity,如下图

    图9
    让其继承Activity类,如下图

    图10
    3、在activity_main.xml中添加一个按钮组件,按照下图修改代码

    图13
    4、在MainActivity.java里面为按钮添加监听,按照下图添加代码

    图14
    5、在AndroidManifest.xml文件里注册第二个SecondActivity.class,如下图

    图16
    6、按照下图修改SecondActivity.java的代码

    图17
    7、全部保存以后,点击rebuild,如下图

    图18
    8、最后运行一下,可以看到如下结果

    图19
    点击按钮后可以看到下图

    图20
    以上就是关于Activity组件的基本操作。

  • 相关阅读:
    ASP.NET CORE 使用 EF CORE访问数据库
    asp.net core连接sqlserver
    angular2+typescript在asp.net MVC Web项目上的实现
    leaflet在地图上加载本地图片
    AngularJs调用NET MVC 控制器中的函数进行后台操作
    AngularJs 的ng-include指令的使用
    redis持久化和分布式实现
    sqlserver事务隔离
    ASP.NET MVC 实现伪静态
    .NET下集中实现AOP编程的框架
  • 原文地址:https://www.cnblogs.com/liming1593/p/5427896.html
Copyright © 2020-2023  润新知