美文网首页
Activity总结

Activity总结

作者: 冰薄荷汽水 | 来源:发表于2017-03-28 17:00 被阅读0次

    前言

    自己学习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。

    相关文章

      网友评论

          本文标题:Activity总结

          本文链接:https://www.haomeiwen.com/subject/hyajottx.html