• 1. 第三章 ActivityActivity生命周期 Activity的启动模式 显式意图和隐式意图 Activity中的数据传递
  • 2. ✎ 学习目标3Activity简介重点了解掌握2 Android中的任务栈 Activity的四种启动模式Activity的生命周期 Activity中的数据传递 显式意图和隐式意图1
  • 3.  目录让IT教学更简单,让IT学习更有效Activity入门3.1☞点击查看本小节知识架构Activity的启动模式 3.2☞点击查看本小节知识架构在Activity中使用Intent3.3☞点击查看本小节知识架构Activity中的数据传递3.4☞点击查看本小节知识架构本章小节3.5
  • 4.  知识架构3.1 Activity入门返回目录3.1.1Activity简介3.1.3Activity的生命周期Activity的创建3.1.2案例——Activity的存活3.1.4
  • 5.  知识架构3.2 Activity的启动模式返回目录3.2.1Android下的任务栈3.2.2Activity的四种启动模式
  • 6.  知识架构3.3 在Activity中使用Intent返回目录3.3.1Intent介绍3.3.3案例——打开系统照相机3.3.2显式意图和隐式意图
  • 7.  知识架构3.4 Activity中的数据传递返回目录3.4.1数据传递方式3.4.3回传数据3.4.2案例——用户注册案例——装备选择3.4.4
  • 8. 让IT教学更简单,让IT学习更有效3.1 Activity入门什么是Activity?3.1.1 Activity简介
  • 9. 3.1 Activity入门3.1.1 Activity简介 Activity是Android应用程序的四大组件之一,它负责管理Android应用程序的用户界面。一个应用程序一般会包含若干个Activity,每一个Activity组件负责一个用户界面的展现。 Activity展示界面Activity展示界面
  • 10. 3.1 Activity入门3.1.1 Activity简介 Activity是通过调用setContentView()方法来显示指定组件的。该方法既可以接收View对象为参数,也可以接收布局文件对应的资源id为参数。 Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,下面列举几个Activity的常用事件。 onKeyDown(int keyCode,KeyEvent event):对应按键按下事件 onKeyUp(int keyCode,KeyEvent event):对应按键松开事件 onTouchEvent(MotionEvent event):对应点击屏幕事件
  • 11. 3.1 Activity入门3.1.2 Activity的创建 在Android应用中,可以创建一个或多个Activity,创建步骤如下所示: 1)定义一个类继承自android.app.Activity或者其子类; 2)在res/layout目录中创建一个xml文件,用于创建Activity的布局; 3)在AndroidManifest.xml文件中注册Activity; 4)重写Activity的onCreate()方法,并在该方法中使用setContentView() 加载指定的布局文件;
  • 12. 3.1 Activity入门3.1.3 Activity的生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为四种状态。 运行状态(active):当Activity在屏幕的最前端时,它是可见的、有焦点的。 暂停状态(Pause):Activity对用户来说仍然是可见的,但它不再拥有焦点。 停止状态(stop):当Activity完全不可见时,它就处于停止状态,但仍然保留着当前状态和成员信息。然而这些对用户来说都是不可见的。 杀死状态(Kill):Activity被系统杀死或者未启动
  • 13. 3.1 Activity入门3.1.3 Activity的生命周期
  • 14. Activity从一种状态转变到另一种状态时会触发一些事件,执行一些回调方法来通知状态的变化,下面通过图例来展示。 3.1 Activity入门3.1.3 Activity的生命周期创建时执行可见时执行回到前台,再次可见时执行获取焦点时执行失去焦点时执行用户不可见,进入后台时执行销毁时执行
  • 15. 3.1 Activity入门3.1.4 案例——Activity的存活为了让初学者掌握Activity的生命周期,接下来通过Activity存活的案例来演示两个Activity跳转时,生命周期方法变化的过程。
  • 16. 3.1 Activity入门 脚下留心:横竖屏切换时的生命周期 当手机横竖屏切换时,Activity会销毁重建(模拟器中横竖屏切换可以使用ctrl+F11)。 如果不希望在横竖屏切换时Activity被销毁重建,可以在AndroidManifest.xml文件中设置Activity的android:configChanges的属性,具体代码如下所示: android:configChanges="orientation|keyboardHidden|screenSize“ 如果希望某一个界面一直处于竖屏或者横屏状态,可以在清单文件中通过设置Activity的属性来完成,具体代码如下所示: 竖屏:android: screenOrientation="portrait" 横屏:android: screenOrientation="landscape"
  • 17. 3.1 Activity入门 多学一招:设置View的点击事件监听Android程序中,设置View的点击事件监听共有四种,分别是: 1)在布局文件中为控件设置onClick属性指定点击方法; 2)创建一个内部类实现OnClickListener接口并重写onClick()方法, 之后需要为控件设置setOnClickListener(Listener listener); 3)主类中实现OnclickListener接口,然后重写onClick()方法; 4)创建匿名内部类,即在为控件设置监听时直接创建一个 OnClickListener实例,不为该实例指定名称。
  • 18. 3.2 Activity的启动模式3.2.1 Android下的任务栈Android系统中的任务栈,类似于一个容器,用于管理所有的Activity实例。在存放Activity时,满足“先进后出(First-In/Last-Out)”的原则。从图可以看出,先加入任务栈中的Activity会处于容器下面,后加入的处于容器上面,而从任务栈中取出Activity是从最顶端先取出,最后取出的是最底端的Activity。
  • 19. 3.2 Activity的启动模式3.2.2 Activity的四种启动模式Activity的启动模式有四种,分别是standard、singleTop、singleTask和singleInstance。 在AndroidManifest.xml中,可以通过标签的android:launchMode属性设置启动模式。
  • 20. 3.2 Activity的启动模式3.2.2 Activity的四种启动模式standard标准模式 standard是Activity默认的启动模式,在不指定Activity启动模式的情况下,所有Activity使用的都是standard模式。 在standard模式下,每当启动一个新的Activity,它就会进入任务栈,并处于栈顶的位置,对于使用standard模式的Activity,每次启动都会创建一个新的实例。
  • 21. 3.2 Activity的启动模式3.2.2 Activity的四种启动模式singleTop模式 singleTop启动模式与standard类似,不同的是,当启动的Activity已经位于栈顶时,则直接使用它,不再创建新的实例。
  • 22. 3.2 Activity的启动模式3.2.2 Activity的四种启动模式singleTask模式 当Activity的启动模式为singleTask时,每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
  • 23. 3.2 Activity的启动模式3.2.2 Activity的四种启动模式singleInstance模式 singleInstance模式加载Activity时,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。
  • 24. 3.3 在Activity中使用Intent3.3.1 Intent介绍Intent中文翻译为“意图”,它是Android程序中各个组件进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。 Intent一般用于启动Activity、启动服务、发送广播等,承担了Android应用程序三大核心组件相互间的通信功能。 Intent启动Activity的方法有: startActivity(Intent intent) startActivityForResult(Intent intent,int code)
  • 25. 3.3 在Activity中使用Intent3.3.2 显式意图和隐式意图显式意图 即在通过Intent启动Activity时,需明确指定激活组件的名称。如果需要在本应用中启动其他的Activity时,可以使用显式意图来启动Activity。 Intent intent = new Intent(this, Activity02.class); startActivity(intent); 显式意图还可以根据目标组件的包名、全路径名来指定开启组intent.setClassName("cn.itcast.xxx","cn.itcast.xxx.xxxx"); startActivity(intent);
  • 26. 3.3 在Activity中使用Intent3.3.2 显式意图和隐式意图隐式意图 没有明确指定组件名的Intent称为隐式意图。系统会根据隐式意图中设置的动作(action)、类别(category)、数据(Uri和数据类型)找到最合适的组件。 标签指明了当前Activity可以响应的动作为"cn.itscast.xxx",而标签则包含了一些类别信息,只有当中的内容同时匹配时,Activity才会被开启。
  • 27. 3.3 在Activity中使用Intent3.3.2 显式意图和隐式意图隐式意图 使用隐式意图开启Activity的示例代码如下所示: Intent intent = new Intent(); // 设置动作和清单文件一样 intent.setAction("cn.itscast.xxx"); startActivity(intent);
  • 28. 3.3 在Activity中使用Intent3.3.3 案例——打开系统照相机在实际开发中,避免不了要调用其他应用程序的组件。例如,在开发新浪微博时,需要启动系统的相机功能。 接下来通过打开系统照相机的案例向大家演示如何使用隐式意图。
  • 29. 3.4 Activity中的数据传递 3.4.1 数据传递方式Intent不仅可以用来开启Activity,也可以在Activity之间传递数据。在数据传递时,可以使用putExtra()方法将数据存储在Intent中。 String data = "Hello Activity02" Intent intent = new Intent(this,Activity02.class); intent.putExtra("extra_data",data); startActivity(intent); 将数据从Activity02中取出 Intent intent = getIntent(); String data = intent.getStringExtra("extra_data");
  • 30. 3.4 Activity中的数据传递 3.4.1 数据传递方式putExtra()不仅可以传递基本类型数据,还可以传递Bundle对象。 Bundle bundle = new Bundle(); bundle.putString("name", "Linda"); Intent intent = new Intent(this,Activity02.class); intent.putExtra(bundle); startActivity(intent); 将数据从Activity02中取出 Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String stuName = bundle.getString("name");
  • 31. 3.4 Activity中的数据传递 3.4.2 案例——用户注册为了让初学者更好的掌握Activity中的数据传递,接下来通过 用户注册的案例来演示Activity中的数据传递。
  • 32. 3.4 Activity中的数据传递 3.4.3 回传数据在使用新浪微博APP时,能发现在微博发布页面进入图库选择图片后,会回到微博发布页面并带回了图片选择页面的图片信息。这个功能的实现利用了Activity回传数据。 Andorid提供了一个startActivityForResult()方法,来实现回传数据。startActivityForResult()方法接收两个参数,第一个参数是Intent,第二个参数用于判断数据的来源。
  • 33. 3.4 Activity中的数据传递 3.4.4 案例——装备选择接下来通过案例装备选择来演示Activity回传数据。本案例实现了购买装备增加生命值的功能。
  • 34. 3.5 本章小结本章主要讲解了Activity的相关知识,包括Activity入门、Activity启动模式、Intent使用以及Activity中的数据传递,并在讲解各个知识点时都编写了实用的案例用来巩固知识点。由于凡是有界面的Android程序都会使用到Activity,因此,要求初学者必须熟练掌握该组件的使用。