Android-Activity理解


功能:

为用户呈现操作界面。多个Activity组成Activity栈,当前活动的Activity位于栈顶。

使用:

如图所示为Activity类及其基类:

AccountAuthenticatorActivity:实现账户管理界面的Activity;

TabActivity:实现Tab界面的Activity;

ListActivity:实现列表界面的Activity;

ExpabdableListActivity:实现可展开列表界面的Activity;

LauncherActivity:实现Activity列表界面的Activity,当单击列表项时,所对应的Activity被启动;

PreferenceActivity:实现程序参数设置,存储界面的Activity;

当我们开发一个Activity时,需要继承Activity类或者其子类。定义好Activity后,其何时被实例化,其方法何时被调用,由Android系统决定。

package com.surge.activity;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

如上代码所示,定义了一个我们自己的Activity。在Activity里面实现后 onCreate(Bundle saveInstanceState)方法,并在其中为当前Activity设置显示的布局。

当在Activity打开时,即会显示如图:


配置Activity:

Activity 需要在AndroidManifest.xml中的<application.../>下进行显式配置:

<span style="white-space:pre">	</span><activity
            android:name="com.surge.activity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
配置Activity的通常配置属性:

name:指定该Activity的实现类的类名;

icon:指定该Activity对应的图标;

label:指定该Activity的标签;

exported:指定该Activity是否允许被其他应用调用。true为能,false为不能;

launchMode指定该Activity的加载模式,该属性支持 standard、singleTop、singleTask和singleInstance这4种加载模式;

除却上述属性外,通常还需要指定一个或多个<intent-filter.../>元素,用于指定该Activity可响应的Intent。

启动、关闭Activity:

Activity中启动其他Activity有如下两种方法:

1、startActivity(Intent intent'):启动其他Activity。

2、startActivityForResult(Intent intent , int requestCode):以指定的请求码(requestCode)启动Activity。

Activity为关闭Activity有如下两种方法:

1、finish():结束当前Activity。

2、finishActivity(int requestCode):结束以startActivityForResult(Intent intent , int requestCode)方法启动的Activity。


Activity之间的数据交换:

两个Activity之间会有Intent存在,只需将数据放入Intent中即可。

Intent提供携带数据的方法:

putExtras(Bundle data):向Intent中放入需要携带的数据包。

Bundle getExtras():取出Intent中所携带的数据包。

putExtra(String key, Xxx value):向Intent中按key-value对的形式存入数据。

getXxxExtra(String key):从Intent中按Key取出指定类型的数据。

上面的Bundle是一个简单的数据携带包,Bundle对象包含了多个方法来存入数据。

putXxx(String key, Xxx data):向Bundle中放入Int、Long等各种类型的数据。

putSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。

Bundle为取出数据所提供的方法:

getXxx(String key):从Bundle取出Int、Long等类型的数据。

getSerializable(String key):从Bundle中取出可序列化的对象。


Activity的生命周期:

Activity大致会经过如下四个状态:

1、活动状态:当前Activity位于前台,用户可见,可以获得焦点。

2、暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。

3、停止状态:该Activity不可见,失去焦点。

4、销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。

如图显示了Activity的声明周期和回调方法:

1、onCreate(Bundle savedStatus):创建Activity时被回调。只被执行一次。

2、onStart():启动Activity时被回调。

3、onRestart():重新启动Activity时被回调。

4、onResume():恢复Activity时被回调,onStart()方法后一定会回调这个方法。

5、onPause():暂停Activity时被回调。

6、onStop():停止Activity时被回调。

7、onDestory():销毁Activity时被回调,该方法只被执行一次。


Activity的4种加载模式:

在配置Activity时可为其配置加载模式,其中可用的属性值有如下4中:

1、standard:标准模式,这是默认的加载模式。每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中-----这种模式不会启动新的Task,新的Activity将被添加到原有的栈中。

2、single:Task顶单例模式。这种模式与standard基本相似,但有一点不同:当将要被启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity的实例,而是直接复用已有的Activity实例。

3、singleTask:Task内单例模式。采用这种加载模式的Activity在同一个Task只有一个实例。其中有如下三种情况:

①、如果目标Activity实例不存在,将创建实例,并将其加入Task栈顶。

②、如果目标Activity已经位于Task栈顶,此时与singleTop模式的行为相同。

③、如果目标Activity已经存在,但未位于Task栈顶,系统将会把位于该Activity上面的所有Activity移出Task栈,从而使得目标Activity位于栈顶。

4、singleInstance:全局单例模式。采用这种加载模式,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。其中有如下两种情况:

①、如果目标Activity不存在,系统会先创建一个新的Task,再创建目标Activity的实例,然后把它加入新的Task的栈顶。

②、如果目标Activity已经存在,无论它位于哪个应用程序内中,不论它位于哪个Task中,系统将会把该Activity所在的Task转到前台,从而使该Activity显示出来。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值