Activity简介

     Activity是Android的四大组件之一,它负责管理Android应用程序的用户界面。

一个应用程序一般会包括若干个Activity,每一个Activity组件负责一个用户界面的展现,

同时Activity是通过调用setContentView()方法来显示指定的组件。需要注意的是,这个方法

既可以接收View对象为参数,也可以接收布局文件对应的资源ID为参数。

在应用程序中,Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,例如:

onKeyDown()按键按下事件,onKeyUp()按键弹起事件,onTouchEvent()点击屏幕事件。


Activity的创建

在Android应用中,可以创建一个或多个Activity,步骤如下:

1——定义一个类继承Activity或者其子类,通常是Activity类

2——在res/layout目录中创建一个xml布局文件,用于创建Activity的布局

3——在AndroidManifest.xml文件中注册Activity

4——重写Activity的onCreate()方法,并在该方法中使用setContentView()加载指定的布局文件

思考:为什么Activity需要的AndroidManifest.xml文件中注册?

    答:我们会在隐式意图中讲解


Activity的生命周期

生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具

有相应的生命周期,Activity的生命周期中分为三或四种状态,运行状态、暂停状态,停止状态,杀死状态。

1——运行状态(Run)

当Activity在屏幕是最前端时,它是可见的、有焦点的,可以用来处理用户的操作,如单击,双击,

长按事件,这种状态称为运行状态。

2——暂停状态(Pause)

在某些情况下,Activity对用户来说任然是可见的,但它不再拥有焦点,即用户不能对其操作。例如:

当Activity被遮住一半时,用户能看见该Activity,但不能对其操作。在这种情况下,当内存不足时,

这个暂停状态的Activity可能会被Android系统“杀死”进程。

3——停止状态(Stop)

当Activity完全看不见时,它就处于停止状态,在这种情况下,当内存不足时,这个停止状态的

Activity很容易被Android系统“杀死”进程。

4——杀死状态(Kill)

这个Activity在后台,被Android系统杀死了所在的进程


Activity从一种状态变化到另一种状态,会执行一些回调方法,程序员需要对这些方法有所理解:

1——onCreate()创建时执行

根据R文件中的ID值,查询对应的控件

2——onStart()可见时执行

3——onRestart()再次回前台时执行

4——onResume()获取焦点时执行

5——onPause()失去焦点时执行

6——onStop()进入后台时执行

7——onDestroy()销毁时执行

回收资源,停止视频等资源


横竖屏切换时的生命周期

当手机横竖屏切换时,Activity会销毁重新创建,(模拟器横竖屏切换用ctrl+F11组合键)如果这样,

对实际开发一定是有影响的,如果不希望在手机横竖屏切换时Activity会销毁重新创建,可以在Android

清单文件中设置Activity的configChanges属性,代码如下:

android:configChanges=”orientation|keyboardHidden|screenSize”

如果希望界面一直处于横屏或竖屏,可以在Android清单文件中设置代码如下:

竖屏:android:screenOrientation=”portrait”

横屏:android:screenOrientation=”landscape”

以上属性都在标签中定义

3.2 在Activity中使用Intent

3.2.1 Intent介绍

在Android系统中,组件之间可以完成通信功能,此时就需要使用Intent。

Intent叫意图,它最常用的功能是绑定应用程序组件,并在应用程序之间进行通信。

Intent一般用于启动Activity,启动服务,发送广播。

负责Android应用程序三大核心组件相互间的通信功能。

启动Activity二个API如下:

startActivity(Intent)

startActivityForResult(Intent)


显示意图和隐示意图

Android中Intent寻找目标组件的方式有二种,一种是显示意图,另一种是隐式意图。

1——显示意图:

在通过Intent寻找目标组件时,需要明确指定组件的名称。适用于寻找程序员自己写的组件。

方式一:适合于访问自己应用中的界面

Intent intent = new Intent(this,Activity02.class);

startActivity(intent)


方式二:适合于访问第三方应用中的界面,且界面类名知道的情况下

Intent intent = new Intent();

Intent.setClassName(“应用在模拟器中的唯一包名”,”包名.类名”);

startActivity(intent)


。。。。。。

2——隐式意图:适合于访问第三方应用中的界面,且界面类名不知道的情况下(做完应用后再讲)

没有明确指定Intent寻找的目标组件,Android系统会根据隐式意图提供的参数(动作,类别,数据),

来找到最适合的组件,如果找到多个适合的组件,Android系统会提示用户选择哪一个最适合的组件。

    动作:这个Intent用来干什么,例如:打电话,打开浏览器

类别:被执行动作的附加信息,例如:当前Activity作为开机后看到的第一个界面,

      我们常用DEFAULT这个默认种类

  数据:是给Intent需要的信息,不同的动作有着不同的数据,例如:打电话需要数据:tel:110,

   其中tel:为前缀,即schema,110为打电话时需要的号码

     例如:打电话就是一个典型的隐式意图的案例。

Intent intent = new Intent()

  Intent.setAction();动作

       Intent.addCategory();类别可省

       Intent.setData();数据

  startActivity(intent);

Activity中的数据传递

 数据传递方式

     在Android开发中,经常要在Activity之间传递数据。Intent不仅可以开启Activity,也可以用来在Activity

之间传递数据。

方式一:

Activity01.java代码如下:

String data = “Hello”;

Intent intent = new Intent(this,Activity02.class);

Intent.putExtra(“DATA”,data);

startActivity(intent);

    ---------------------------------------------------------

Activity02.java代码如下:

Intent intent = getIntent();

String data = Intent.getStringExtra(“DATA”);


方式二:

Activity01.java代码如下:

Bundle bundle = new Bundle();

Bundle.putString(“NAME”,”哈哈”);

Bundle.putInt(“AGE”,22);

Intent intent = new Intent();

Intent.putExtras(bundle);

startActivity(intent);

    ---------------------------------------------------------

Activity02.java代码如下:

Intent intent = getIntent();

Bundle bundle = Intent.getExtras();

String name = Bundle.getString(“NAME”);

Int age = bundle.getInt(“AGE”);


回传数据

在某些情况下,一个Activity需要得到第二个Activity的数据,这种情况就叫回传数据。

Android提供了一个startActivityForResult()方法,来实现回传数据。

Activity01.java代码如下:

     Intent intent = new Intent(this,Activity02.class);

startActivityForResult(intent,1);


//当Activity02界面关闭时执行,即Activity01界面一直监听Activity02界面是否关闭了,

调用finish()方法

public void onActivityResult(){

//获取Activity02传回的数据

//再进行处理

}

---------------------------------------------------------

Activity02.java代码如下:

     Intent intent = getIntent();

     Intent.putExtra(“DATA”,”哈哈”);

     setResult(1,intent);

     finish();


Activity的启动模式

 Android下的任务栈

Android采用任务栈的方式来管理Activity的实例。当启动一个应用时,Android就会为之创建一个

任务栈。先启动的Activity压在栈底,后启动的Activity压在栈顶,通过启动模式可以控制Activity在任务栈

中的加载情况。


Activity的4种启动模式

在实际开发中,应根据特定的需求为每个Activity指定恰当的启动模式。Activity的启动模式有四种:

standard、singleTop、singleTask和singleInstance。我们可以在android清单文件中通过标签的

launchMode属性可以设置启动模式,如果不设置的话,默认是standard启动模式。

1——standard模式:

每当启动一个新的activity,它就会进入任务栈,并处于栈顶位置,

系统不会判断栈顶或栈中是否已有相同的activity。

2——singleTop模式:

当启动的activity已经位于栈顶时,则直接使用它不再创建新的activity;

如果启动的activity没有位于栈顶,还是会创建新的activity进入栈顶。

3——singleTask模式:

强调整个应用程序中只有一个activity

当启动activity时,系统首先检查栈中是否存在该activity,

如果发现有该activity,并将该activity之上的所有activity出栈,

如果没有该activity,还是会创建新的activity进入栈顶。

4——singleInstance模式:

      强调整个android系统中,只有一个activity

 如果要启动的activity不存在,系统会先创建一个新的任务栈,

再创建该activity,最后将该activity加入栈顶;

 如果要启动的activity已存在,无论位于哪个应用程序的任务栈中,

系统都会将该activity所在的任务栈转到前台,从而使该activity显示出来。


转载于:https://blog.51cto.com/tlwnet/1149378

更多相关文章

  1. 19、从头学Android之Android的数据存储--SharedPreferences
  2. Android--Adapter深入理解及ListView优化
  3. Android(安卓)SQLite使用SQLiteOpenHelper类对数据库进行操作
  4. Android(安卓)Activity与Service数据交互:Binder、bindService(系
  5. Android按钮文字变色(使用 ColorStateList)
  6. Android(安卓)仿写微信里的标签功能
  7. 吊打面试官:Android中高级面试题 -- 终局之战
  8. Android_ViewPager实现滚动广告
  9. Android(安卓)in Mono开发初体验之DataBase

随机推荐

  1. android之ImageView控件以及子类的学习
  2. Android(java)学习笔记86:案例短信发送器
  3. Android 文件操作
  4. Android textview autolink web 隐藏链接
  5. 教你如何更改android应用的包名
  6. Android 使用level-list改变对应的状态图
  7. android中在子线程中更新UI的几种方法
  8. android Field类的讲解
  9. android 点击、滑动事件的处理 GestureDe
  10. 一种极低成本的Android屏幕适配方式