Android:Activity组件学习笔记

原创 2015年07月08日 00:12:27

一、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,是一种展示型组件,用于向用户展示UI。它只有一种运行模式:处于启动状态。 Service,是一种计算型组件,用于在后台执行一系列计算任务。它有两种状态:启动状态和绑定状...
  • tgzzl
  • tgzzl
  • 2016年08月20日 10:17
  • 373

Android在一个activity改变另一个activity的组件

application相关知识   Application和Activity,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象...
  • DeMonliuhui
  • DeMonliuhui
  • 2017年01月17日 00:36
  • 1097

深入剖析Android四大组件(一)——Activity生命周期详解

虽然如此,但即使你没有实现onSaveInstanceState()方法,也还是有一些Activity的状态通过Activity类默认实现的onSaveInstanceState()方法恢复。特别是,...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2015年07月25日 19:37
  • 2990

Android四大组件之Activity

Android四大组件之Activity一、Activity的生命周期Activity是android的四大组件之一,可以说是Android四大组件中最重要的组件之一。它负责了我们的界面显示,实际开发...
  • Mr_dsw
  • Mr_dsw
  • 2015年09月03日 21:36
  • 1352

Activity组件概述

1.Activity简介 首先应该知道的是一个Activity就表示一个界面 2.Avtivity状态 3.Activity生命周期 4.Activity传递数据 5.Activity处理返回结果 ...
  • qq_26275687
  • qq_26275687
  • 2015年10月22日 11:31
  • 206

Android研发安全2-Activity组件安全(下)

这篇文章是Android研发安全之Activity组件安全第二篇,本文将给大家分享Activity界面劫持方面的预防知识。什么是Activity劫持       简单的说就是APP正常的Activit...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年10月20日 13:53
  • 7766

Chrome学习笔记(三):UI组件,皮肤引擎

原创文章,转载请注明:转载自Soul Apogee 本文链接地址:Chrome学习笔记(三):UI组件,皮肤引擎 —— 控件库 这篇文章是接着上篇文章继续聊的,Chrome的代码实在太多,每一...
  • wanfengnianhua
  • wanfengnianhua
  • 2017年04月25日 18:56
  • 251

Android研发安全1-Activity组件安全(上)

- 谨慎处理接收的Intent以及其携带的信息 - 当Activity返回数据时候需注意目标Activity是否有泄露信息的风险 - 目标Activity十分明确时尽量使用显示启动 - 谨慎处理Act...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年10月08日 11:20
  • 6399

Android四大组件之Activity的四种启动模式

一个应用中可能有多个界面 那么每个界面展示的次序不同,创建的先后顺序不同,存储界面的内存方式也不同,我们称这种存储方式为任务栈。 1. 栈的特点:先进后出 2. 任务栈的配置位置:AndroidM...
  • caidie_huang
  • caidie_huang
  • 2016年10月27日 17:20
  • 181

深入剖析Android四大组件(七)——Activity启动的4个阶段

在Activity的启动流程中,共有4个阶段: 1.第一阶段——启动信息翻译以及服务调用 2.第二阶段——Activity的相关处理 3.第三阶段——处理应用程序进程 4.第四阶段——显示应用程序并处...
  • liyuanjinglyj
  • liyuanjinglyj
  • 2015年11月21日 20:35
  • 5825
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android:Activity组件学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)