您的位置:首页 > 移动开发 > Android开发

Android:Activity组件学习笔记

2015-07-08 00:12 483 查看
一、Activity简介

1、Activity是android四大组件之一,在app中提供一个界面供用户交互,同时又具有生命周期,其生命周期交给系统去管理,我们在操作中只是给出指示而已。

2、同一个app中的activity相对其他activity是独立的,多个应用程序间的activity可以相互访问。例如,android官网上举的例子,摄像机可以调用邮箱来分享图片。

二、Activity栈

activity栈 由系统提供,用来管理应用程序中的activity。

三、Activity生命周期







1、activity的四种状态:

(1)runing状态:当activity处于当前屏幕最前端,即在activity栈顶,则处于running状态

(2)paused状态:当activity失去焦点,但是仍然可见,可能被一个透明地activity或者是以对话框形式出现的activity挡住,则处于paused状态。当activity处于该状态,它仍然保留了activity的信息,但可能因内存过低而被系统杀掉。

(3)stoped状态:当activity被另一个activity完全的遮挡住,则处在stoped状态。当activity处在该状态,它仍然保留了activity的状态信息,但已经不再可见了,很容易被系 统杀掉

(4)killed状态,finish状态:activity处于该状态,若想再次显示,只能重新onCreate()

2、activity一些常见状态

(1)activity1跳转到activity2,先调用activity1的onPause(),等activity2依次调用onCreate()、onStart()、onResume()之后,activity1再调用onStop() 。

(2)当用户点击手机上的Back回退键,当前的activity会依次调用onPause()、onStop()、onDestroy() ,所以点击back键后,默认activity被销毁 。

(3)当用户点击手机上的Home键或者电源键,当前的activity会依次调用onPause()、onStop() 。重新回到activity则会调用onRestart()、onStart()、onResume() 。

四、Activity传值

1、几种传值方式的代码

Intent intent = new Intent(MainActivity.this, SecondActivity.class);

//Bundle传值
Bundle bundle = new Bundle() ;
bundle.putString("name", "cigar");
bundle.putInt("age", 24);
intent.putExtra("info" , bundle) ;

//直接传值
intent.putExtra("sex", "男") ;

//Serializable对象传值
Student student = new Student() ;
student.setId(20100802931223L);
student.setName("cigar");
intent.putExtra("student",student) ;

//Parcelable对象传值
Person person = new Person();
person.setName("cigar");
person.setSex("男");
person.setAge(24);
intent.putExtra("person", person);

MainActivity.this.startActivity(intent);2、获取值的代码
Intent intent = this.getIntent();
//获取传过来的bundle值
Bundle bundle = intent.getBundleExtra("info");
String name = bundle.getString("name");
int age = bundle.getInt("age");

//直接获取值
String sex = intent.getStringExtra("sex");

//获取Serializable对象
Student student = (Student) intent.getSerializableExtra("student");

//获取Parcelable对象
Person person = intent.getParcelableExtra("person");3、实现Parcelable接口的源码
public class Person implements Parcelable {
private String name;
private String sex;
private int age;

public Person() {

}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Person(Parcel in) {
name = in.readString();
sex = in.readString();
age = in.readInt();
}

public static final Parcelable.Creator<Person> CREATOR
= new Parcelable.Creator<Person>() {
public Person createFromParcel(Parcel in) {
return new Person(in);
}

public Person[] newArray(int size) {
return new Person[size];
}
};

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeString(getSex());
dest.writeInt(getAge());
}

@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}

       实现Parcelable接口,必须实现public int describeContents() 和 writeToParcel(Parcel dest , int flags) 两个方法,其中describeContents默认不用动,在writeToParcel中将参数的值write进dest中。接着拷贝源码中的CREATOR,更改<MyParcelable>中的类型,这边改为Person,并定义一个带参数Parcel的构造方法 public Person(Parcel in) 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Activity