1. Activity

    Activity的运行机制其实和JavaEE中的servlet很像,而我们的Android系统也就相当与其servlet容器,Activity在其中进行创建实例、初始化、运行、销毁等等过程全都是由容器来调用的。

  2. Activity的生命周期

    以上图就可以说明activity的生命周期。其中Activity生命周期的的三大状态:

  1. 运行状态

    1. 也就是当Activity在屏幕的最前端时候,它是可见、有焦点的,可以用来处理用户的常见操作(如点击、长按等事件)

  2. 暂停状态

    1. 这个状态下,Activity还是可见的,但是已经失去了焦点,用户不能进行操作,如弹框时,主页面仍是可以见的,只是不能操作而已。但是如果内存不足时,有可能会被kill掉。

  3. 停止状态

    1. 此时,Activity是完全不可见得,但是仍然会保留当前状态和成员信息。也有可能被Kill。

      *具体的说明一下Activity的生命周期的流程:

      1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

      2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

      3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

      4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

      5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

      6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

      7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

  1. 简单的传递参数

    1. 通过Bundle对象来传递

      其中的bundle就像数据的“袋子”一样,通过bunble来传递。

      例子:

      main1:简单的输入框+提交按钮

      Main2:一个TextView来显示

      在main1中

      按钮添加一个点击事件:sendClick

      其中的editText_info 是输入框(获取id)

       

private EditText editText_info;

editText_info = (EditText) findViewById(R.id.editText_info);

 

public void sendClick(View view){
    //创建意图(Intent)
    Intent intent = new Intent(this,MainActivity2.class);
    String info =editText_info.getText().toString();

//创建Bundle,作为数据容器
    Bundle data = new Bundle();
    data.putString("info",info);
    intent.putExtra("data",data);
    startActivity(intent);
}

在main2中

TextView来接收数据

 

private TextView textView;

textView = (TextView) findViewById(R.id.textView_js);
Intent intent = getIntent();
Bundle data = intent.getBundleExtra("data");
String info = data.getString("info");
textView.setText(info);

  1. 传递对象

    两种方法:(Serializable)(Parcelabel)推荐使用parcelable

  1. 序列化(Serializable)原生的io 缺点就是性能

     

    public void sendObjClick(View view){
        //创建传递的对象
        Cat cat = new Cat();
        cat.name="小喵";
        cat.age=2;
        cat.type="英国短尾";

    Intent intent = new Intent(this,MainActivity2.class);
        intent.putExtra("cat",cat);
        startActivity(intent);
    }

    Cat.java 实现serializable接口

    public class Cat implements Serializable {
        String name;
        int age;
        String type;

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

  2. 使用包裹(Parcelable

    //传递数据二 使用的是Parcelable(包裹)
    public void sendObj2Click(View view){
        Dog dog = new Dog();
        dog.name ="小旺";
        dog.age=2;
        dog.type="萨摩耶";

    Intent intent = new Intent(this,MainActivity2.class);
        intent.putExtra("dog",dog);
        startActivity(intent);
    }

     

    Dog.java

     

    public class Dog implements Parcelable{
        String name;
        int age;
        String type;

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

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

    //写入包裹
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
            dest.writeString(type);
        }

    //对象的创建器(解包,需要的对象)
        public static final Parcelable.Creator<Dog> CREATOR = new Creator<Dog>(

    ) {
            @Override
            public Dag createFromParcel(Parcel source) {
                Dag dog = new Dog();
                dog.name = source.readString();
                dog.age = source.readInt();
                dog.type = source.readString();

    return dog;
            }

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

     

显示文本:

textView = (TextView) findViewById(R.id.textView_js);

Intent intent = getIntent();
//        Cat cat = (Cat) intent.getSerializableExtra("cat");
//        textView.setText(cat.toString());
        Dag dag = intent.getParcelableExtra("dag");
        textView.setText(dag.toString());

Android——Activity的简绍的更多相关文章

  1. Android Activity启动流程源码全解析(1)

    前言 Activity是Android四大组件的老大,我们对它的生命周期方法调用顺序都烂熟于心了,可是这些生命周期方法到底是怎么调用的呢?在启动它的时候会用到startActivty这个方法,但是这个 ...

  2. Android:Activity+Fragment及它们之间的数据交换.

    Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...

  3. Android Activity launchMode研究

    Android Activity launchMode研究 Activity的Launch mode一共有四种: standard, singleTop, singleTask, singleInst ...

  4. android Activity类中的finish()、onDestory()和System.exit(0) 三者的区别

    android Activity类中的finish().onDestory()和System.exit(0) 三者的区别 Activity.finish() Call this when your a ...

  5. Python学习(基础简绍)

    今天终于开始了python的学习,至于python的历史我就不说了,百度百科中太详细了,我这里说就是关公面前耍大刀,太自不量力了,所以,废话不多说,直接讲讲我惊天学习Python的收获吧. 1.Pyt ...

  6. Android Activity的生命周期简单总结

    Android Activity的生命周期简单总结 这里的内容参考官方的文档,这篇文章的目的不是去总结Activity是如何启动,如何创造,以及暂停和销毁的,而是从实际开发中分析在Activity各个 ...

  7. Android Activity返回键控制的两种方式

    Android Activity返回键监听的两种方式 1.覆写Activity的OnBackPressed方法 官方解释: Called when the activity has detected ...

  8. Android Activity和Fragment的转场动画

    Android Activity和Fragment的转场动画 Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, ...

  9. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

随机推荐

  1. UVA11491-Erasing ans Winning(贪心)

    Problem UVA11491-Erasing ans Winning Accept: 799  Submit: 5753Time Limit: 3000 mSec Problem Descript ...

  2. UVA12188-Inspector's Dilemma(欧拉回路+连通性判断)

    Problem UVA12188-Inspector's Dilemma Time Limit: 3000 mSec Problem Description In a country, there a ...

  3. Nginx缓存服务

    Nginx缓存服务 1.缓存常见类型 2.缓存配置语法 3.缓存配置实践 4.缓存清理实践 5.部分页面不缓存 6.缓存日志记录统计 通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后 ...

  4. zabbix 应用监控作业笔记 ansible-playbook

    目录 目录结构 zabbix-web.yaml zabbix-backup.yaml zabbix-nfs.yaml zabbix-mysql.yaml zabbix-server.yaml zabb ...

  5. pytorch学习-WHAT IS PYTORCH

    参考:https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor- ...

  6. c++面经积累<1>

    引用和指针 指针是一个实体,需要分配内存空间,而引用只是一个别名,不需要分配内存空间 指针可以有多级,而引用只能有一级. 指针和引用的自增运算不一样,指针是指向下一个空间,而引用是引用的变量值增加 s ...

  7. Vscode更新之后rg.exe占用cpu过高

    文件->首选项->搜索"search.followSymlinks"改为false https://www.zhihu.com/question/67317040

  8. 【原创】一个线程oom,进程里其他线程还能运行吗?

    引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 先说一下答案,答案是还能运行 不瞒大家说, ...

  9. Python—re模块

    re模块 正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re 常用的表达式规则 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹 ...

  10. 使用webview几种常见的hybrid通信方式

    js 与原生之间的通信: 1.JSbridge::(webviewJavascriptBridge)一种js与原生native通信的机制,可以h5与native互调: 2.Cordova: 核心就是原 ...