Activity总结

前言

自己学习Android也已经非常长的时间了,但是因为工作原因却从来没有花时间去整理自己的知识体系,所以乘现在工作不忙,把自己觉得重要的基础知识点整理出来,方便自己回顾学习的东西也能帮助其他的人学习和复习。本文长期更新。

目录

  1. Activity的概述
  2. Activity的基本使用
  3. Activity的生命周期
  4. Activity的启动模式

一, Activity的概述

Activity中文翻译为活动,可以提供用户交互的屏幕,用来打电话,拍照,发邮件,浏览地图等。每个Activity都有一个可以绘制用户界面的窗口,这个窗口一般全屏,但是也可以小于屏幕并浮动在其它窗口之上。

二,Activity的基本使用

新建Activity

  • 要使用Activity,先新建一个子类继承Activity,在子类里我们需要根据Activity的生命周期重写系统调用的回调方法。
  • 清单文件注册
  • 启动Activity。从一个Activity跳转到另一个Activity可以使用startActivity方法,使用时传入一个Intent对象,如果要携带数据可以在Intent上附加数据。

传递数据

传递基本类型数据
  1. Activity1跳转前将数据放入到Intent
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("datastring", "JackalTsc");
intent.putExtra("dataint", 22);
startActivity(intent);
  1. Activity2中获取到Intent后提取数据
String dataStr = getIntent().getStringExtra("datastring");
int dataInt = getIntent().getIntExtra("dataint", -1);
Log.e("ssssss", "获取到的数据为 " + dataStr + " " + dataInt);
传递序列化数据
  1. 类序列化 主要实现Parcelable接口或者Serializable接口
public class User implements Parcelable {

    private String userName;
    private int userAge;

    public User(String userName, int userAge) {
        this.userName = userName;
        this.userAge = userAge;
    }

    protected User(Parcel in) {
        userName = in.readString();
        userAge = in.readInt();
    }

    public static final Creator<User> CREATOR = new Creator<User>() {
        @Override
        public User createFromParcel(Parcel in) {
            return new User(in);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userName);
        dest.writeInt(userAge);
    }

    public String getUserName() {
        return userName;
    }

    public int getUserAge() {
        return userAge;
    }
}
  1. 将可序列化的对象放入Intent中
User user = new User("XiaoMing", 22);
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra("dataobject", user);
startActivity(intent);
  1. 在目的Activity中获取数据
User mUser = getIntent().getParcelableExtra("dataobject");

Log.e("ssssss", "获取到的对象数据为 " + 
        mUser.getUserName() + " " + 
        mUser.getUserAge());

三,Activity的生命周期

生命周期流程图:

1

Activity生命周期主要有7种阶段

  • onCreate() 创建,当Activity初次创建时调用
  • onStart() 开始,Activity对用户可见时调用
  • onResume() 恢复,Activity获取用户焦点,正常交互
  • onPause() 暂停,Activity失去用户焦点但是仍然可见
  • onStop() 停止,Activity不可见时调用
  • onRestart() 重新开始,Activity从不可见变为可见时调用
  • onDestroy() 销毁,Activity销毁

Activity保存两种状态的情况

2

四,Activity的启动模式

  1. standard模式

标准模式,这是系统默认的启动模式,每次通过这种模式启动Activity时,系统会在当前的任务栈内为目标Activity创建新的实例,并且不会创建新的Task.

  1. singleTop模式

栈顶复用模式,如果要启动的Activity的实例已经存在当前Task栈顶时,系统会调用onNewIntent()方法将intent指向它,而不是创建一个新的实例。如果要启动的Activity没有位于栈顶,那么系统会重新创建实例,并将它加载到Task栈顶。

  1. singleTask模式

栈内复用模式,首先检测整个Activity栈中是否存在要启动的Activity,如果要启动的Activity存在但不是位于栈顶,则会先将该Activity以上的其它Activity销毁,再将要启动的Activity置顶,如果位于已经栈顶,那么和singleTop模式一样,如果如果要启动的Activity不存在,则会创建Activity的实例并加入栈顶。

  1. singleInstance模式

全局单例模式,这种启动模式下,系统保证无论从哪个Task中启动目标Activity,都只会创建一个实例,而且该实例会单独存在一个Task中,在这个Task中有且仅有这一个Activity。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容