1、什么是Activity?

在Android当中,Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。在Activity中包含一个window对象,在window当中通常包含一个布局容器对象(如LinearLayout布局对象),在布局对象中包含了我们之前讲解的各种UI组件。和HTML DOM一样,Android的Activity也是一个具有严格层次结构的,类似于树形的对象结构。

2、回调
C、C++、Java Script中的回调是通过指针来实现的;但是Java中不允许直接操作指针,回调是通过接口来实现的。接口(系统框架)是系统提供的,接口的实现使用户实现的。系统通过在不同的状态“回调”我们的实现类来达到接口和实现的分类。(Activity接口)

3、如何创建自己的Activity?(三步走)

MyActivity.java → activity_my .xml → 在AndroidManifest.xml中的相应注册 或者 new→Android Activity

第一步:在相应的布局文件中定义显示布局;
第二步:定义Activity类是,继承Activity,并求重写onCreate()方法
- 找到对应的xml布局文件:setContentView(R.layout.main)
- 通过findViewById找到相应控件对象:btn = (Button)this.findViewById(R.id.button01);
第三部:在AndroidManifest.xml中注册。

补充:
1 )、每一个Activity 都必须继承自 Activity类;
2 )、必须实现Activity类的 onCreate()方法(应用程序在初始化 Activity时,调用的其中的一个回调方法,在该方法中定义如何展示自己创建的 Activity,即Activity 里面有什么内容);
3 )、每一个Activity 的信息都必须配置到项目中一个核心的配置文件 (AndroidManifest.xml)中的Application 结点下;当我们把自己创建的 Activity注册到AndroidManifest.xml 配置文件中时,系统就可以通过该配置文件找到相应的 Activity;配置项如下:

1 )-------------------------------------------  startActivity(new Intent(MainActivity.this,MyActivity.class)); //从当前MainActivity跳转到MyActivity核心代码:public void onClick(View view){Intent intent = new Intent();intent.setClass(MainActivity. this , MyActivity. class);//  Intent intent = new Intent(MainActivity. this , MyActivity. class);MainActivity. this.startActivity(intent);}
2 )-----------------------------------------------
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com")));
//从当前MainActivity跳转到网址http://www.baidu.com

实例:(点击button按钮,从SecondActivity跳转到FirstActivity)

6、Activity之间传递数据
(后面的文章会给出一个关于Activity之间传递数据的具体应用实例:在注册一个系统会员的时候经常需要多个步骤,我们经常使用“上一步”,“下一步”来完成,那么当用户在返回“上一步”时应如何保存信息呢?

1 )、传递简单数据可以只用Intent;
2)、传递数据包时就要用到Bundle和Intent了; 使用对象Bundle,将要传递的信息封装到对象Bundle中,并通过Intent对象传递到另一个Intent中。
3 )、传递自定义值对象:如传递一个自定义的User,要用到序列化的类Serializable或Parcelable。

 用法:(核心代码)//MainActivity中Bundle bundle= new Bundle();bundle.putString( "keyname", keyvalue);Intent intent = new Intent(MainActivity.this,MyActivity .class );intent. putExtra(bundle);//MyActivity中Intent intent=getIntent();Bundle bundle=intent.getExtras();String keyvalue=bundle.getString( "keyname");另一种方法://MainActivity中Bundle bundle= new Bundle();bundle.putString( "keyname1", keyvalue1);bundle.putString( "keyname2", keyvalue2);bundle.putString( "keyname3", keyvalue3);Intent intent = new Intent(MainActivity.this,MyActivity .class );intent. putExtra("key",bundle);//MyActivity中Intent intent=getIntent();Bundle bundle=intent.getBundleExtras("key");String keyvalue1=bundle.getString( "keyname1");String keyvalue2=bundle.getString( "keyname2");String keyvalue3=bundle.getString( "keyname3");

实例:(在MainActivity中要求输入用户名称,通过用户名称查询用户联系方式信息,并在ResultActivity中显示。)
MainActivity.java

ResultActivity.java

7、Activity的生命周期

1).启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2).当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。(onPause方法用来持久保存数据)
3).当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4).当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5).用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6).当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7).用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
我们可以自己定义当处于什么状态的时候做什么事件。

在Activity跳转过程中发生的生命周期变化(点击A中的按钮跳到B):
1、B为一个Activity时
A onCreate→A onStart→A onResume→(点击按钮进入B界面)→A onPause→B onCreate→B onStart→B onResume→A onStop;
2、B为一个对话框(dialog)时
A onCreate→A onStart→A onResume→(点击按钮进入B对话框)→A onPause→B onCreate→B onStart→B onResume→(点击空白处回到A界面)→B onPause→A onResume→B onStop→B onDestory;

Android基本程序单元Activity总结相关推荐

  1. 解开Android应用程序组件Activity的singleTask之谜(3)

    回到前面的startActivityUncheckedLocked函数中,这里的变量top就为null了,于是执行下面的else语句: if (top != null) { ...... } else ...

  2. 基本程序单元Activity—Activity生命周期之数据传递小程序

    一. 实验目的 (1) 掌握Andriod Studio的基本使用方法: (2) 掌握Andriod Studio中常用的控件及其使用方法: 二. 实验内容 题目: 编写一个数据传递的小程序,要求在第 ...

  3. Android应用程序窗口(Activity)的窗口对象(Window)的创建过程分析

    在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一 ...

  4. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认Activity是在新的进程和任务中启动的:本文将继续分析在应用程序内部启动非默认Activit ...

  5. vs2015 linux jni,使用Visual C++ 跨平台移动技术调试JNI Android 应用程序

    使用Visual C++ 跨平台移动技术调试JNI Android 应用程序 02/05/2015 6 分钟可看完 本文内容 [原文发表时间] 2014/12/12  4:22PM 之前我们已经介绍了 ...

  6. android java广播,[原]Android应用程序发送广播(sendBroadcast)的过程分析

    前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来.ActivityManagerS ...

  7. Android应用程序绑定服务(bindService)的过程源代码分析

    Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...

  8. Android程序活动单元Activity

    Android程序活动单元Activity 目录 Android程序活动单元Activity 4.1 Activity的生命周期 4.1.1 生命周期状态 4.1.2 生命周期方法 4.2 Activ ...

  9. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

最新文章

  1. iOS下JS与OC互相调用(一)--UIWebView 拦截URL
  2. 【LorMe云讲堂】蔡枫:真菌的耐盐机制
  3. 配置bind主域名服务器
  4. Oracle查询一个用户的所有表的结构信息的SQL语句
  5. Design layer interface的设计与实现
  6. python中不论类的名字是什么歌_Python自动猜歌名,还愁排名上不去嘛?
  7. python中文注释
  8. java aspectj_AspectJ的基本用法
  9. 线性表的顺序表示和实现(严蔚敏版)
  10. 抑郁症是不可告人的病吗?
  11. IDEA中单元测试使用Scanner控制台无法输入
  12. 开始学习《自己动手写操作系统》遇到的小问题.
  13. LabVIEW用高速数据流盘
  14. wsimport 直接处理wsdl接口
  15. 2020 最新的 65 道 Java 经典面试题及答案
  16. Android 日历提供器(二)
  17. implementation 'com.guo.android_extend:android-extend:1.0.6'失败解决方法
  18. Db2数据库计算年龄
  19. 返回时上一界面仍保持之前的内容
  20. 创建一个SpringBoot项目

热门文章

  1. perl中Net::FTP帮助文档
  2. GDI+中常见的几个问题(6)
  3. 配置windows 2008 作为远程访问SSL-×××服务器系列之二
  4. android 跳转到小米手机神隐模式
  5. 【Android】页面栈
  6. startActivity( ) 与startActivityForResult( )的区别
  7. 算法测试—机器学习算法评价指标
  8. sublime linux下无法输入中文
  9. apscheduler 绿色版
  10. http接口服务方结合策略模式实现总结