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. Python之Requests库的异常

    异常                        说明                                     requests.ConnectionError 网络链接错误一场,如 ...

  2. linux普通用户提权操作

    [root@test1 ~]# vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALLzhouyu ...

  3. 【转】【fiddler】抓取https数据失败,全部显示“Tunnel to......443”

    这个问题是昨天下午就一直存在的,知道今天上午才解决,很感谢“韬光养晦”. 问题描述: 按照网络上的教程,设置fiddler开启解密https的选项,同时fiddler的证书也是安装到系统中,但是抓取h ...

  4. Linux:Day4(上) 文件管理、管道

    文件管理:cp.mv.rm 复制命令:cp cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION] ...

  5. java 1.5 自动拆箱和装箱的注意事项

    背景 java1.5后引入了自动装箱和自动拆箱的概念 自动拆箱:将引用类型转化为基本数据类型 自动装箱:将基本数据类型装为引用类型 但是实际使用中,什么情况自动拆箱什么情况自动装箱呢? 自动装箱 In ...

  6. TypeError: Buffer.alloc is not a function

    错误信息:TypeError: Buffer.alloc is not a function 截图如下: 解决办法(依次从上往下执行): sudo npm cache clean -f sudo np ...

  7. Shell第一篇:BASH 环境

    一 什么是SHELL shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本.本节我们站在命令解释器的角度来阐述shell 命令解释器SHELL的发展历史,SH- ...

  8. Charles抓包显示乱码解决方法

    [问题现象] 在抓https协议请求时,Request和Response显示乱码了: [解决办法] 第一步:点击 [工具栏-->Proxy-->SSL Proxying Settings. ...

  9. 02-vue学习篇-以正确的姿势使用vue

    1.渲染数据 #view层 <div class="hello"> <h1>{{ msg }}</h1> //msg </div> ...

  10. Android so注入(inject)和Hook技术学习(三)——Got表hook之导出表hook

    前文介绍了导入表hook,现在来说下导出表的hook.导出表的hook的流程如下.1.获取动态库基值 void* get_module_base(pid_t pid, const char* modu ...