一、 认识Activity

Activity是Android的四大组件之一,那么它是什么呢?如果简单的理解,可以把它当成应用的一个显示的屏幕。

Activity类处于android.app包中,继承体系如下: 

java.lang.Object 

android.content.Context 

android.app.ApplicationContext 

android.app.Activity

Activity是单独的,用于处理用户操作。开发人员可以通过 setContentView(View)接口把UI放到Activity创建的窗口上,大部分的 Activity子类都需要实现以下两个方法:

onCreate(Bundle)方法是初始化Activity的地方. 在这儿通常可以调用setContentView(int)设置在资源文件中定义的UI, 使用findViewById(int) 可以获得UI中定义的窗口. 

onPause()方法是使用者准备离开Activity的地方,在这儿,任何的修改都应该被提交(通常用于ContentProvider保存数据). 

程序定义的Activity必须在AndroidManifest.xm文件中进行配置,否则不能使用。

二、 Activity的生命周期

2.1 首先我们看看Activity的生命周期图

理解Activity的生命周期:

public class FirstActivity extends Activity
{
    private Button btn1;
    private Button btn2;     @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        System.out.println("----onCreate----");         setContentView(R.layout.main);         this.btn1 = (Button) findViewById(R.id.btn1);
        this.btn1.setOnClickListener(new OnClickListenerImpl());
        this.btn2 = (Button) findViewById(R.id.btn2);
        this.btn2.setOnClickListener(new OnClickListenerImpl());     }     @Override
    protected void onStart()
    {
        super.onStart();         System.out.println("----onStart----");
    }     @Override
    protected void onRestart()
    {
        super.onRestart();         System.out.println("----onRestart----");
    }     @Override
    protected void onPause()
    {
        // TODO Auto-generated method stub
        super.onPause();
        System.out.println("----onPause----");
    }     @Override
    protected void onResume()
    {
        super.onResume();         System.out.println("----onResume----");
    }     @Override
    protected void onStop()
    {
        super.onStop();         System.out.println("----onStop----");
    }     @Override
    protected void onDestroy()
    {
        super.onDestroy();         System.out.println("----onDestroy----");
    }     private class OnClickListenerImpl implements OnClickListener
    {         @Override
        public void onClick(View v)
        {
            int id = v.getId();
            switch (id)
            {
                case R.id.btn1:
                    Intent i1 = new Intent(FirstActivity.this, SecondActivity.class);
                    FirstActivity.this.startActivity(i1);
                    break;
                case R.id.btn2:
                    Intent i2 = new Intent(FirstActivity.this, ThirdActivity.class);
                    FirstActivity.this.startActivity(i2);
                    break;
                default:
                    break;
            }
        }     }
}

接下来,我们测试,直接启动应用;

这时,我们点击返回键:

我们重启启动界面,点击第一个按钮,进入第二个界面,然后再点击返回按钮,可看到日志输出:

我们修改ThirdActivity的样式,使其变成一个弹出框式的Activity,只需要再配置该Activity时指定:

<activity
android:name=".ThirdActivity"
android:theme="@android:style/Theme.Dialog" ><span style="font-family: Arial, Helvetica, sans-serif;"></activity></span>

接着,我们重启启动该应用,并点击btn2,可看到日志输出:

我们可以看出,以为ThirdActivity是对话框风格的,所以启动后,FirstActivity并非不可见,只是失去了焦点,所以其并没有进入onStop()方法中,所以在返回到该Activity时,是直接进入了onResume方法,而并没有重启启动(onResult()和onStart()).

三、 Activity生命周期的使用场景

3.1 onDestory的应用:

比如我们开发一个应用,需要用户输入数据,而如果用户一不小心把应用关闭了,那数据就丢失了。 所以,友好的应用应该是我们需要在onDestory()方法中,将用户输入的信息保存下来(文件中),然后在onCreate方法里,再把它取出来。

3.2 onStart的应用:测试网络的环境:

我们希望,当用户进入到界面上时,检查网络,如果网络不可用,则跳转到网络设置界面,而且,必须是用户设置网络成功后,才可行,不然就一直让用户设置网络。 此时,我们可以使用onStart方法,onStart方法是在Activity可见时调用的。

    @Override
protected void onStart()
{
super.onStart(); ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null && info.isConnected())
{
Toast.makeText(this, "网络可用", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, "网络不可用", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClassName("com.android.setting", "com.android.setting.WirelessSettings");
startActivity(intent);
} System.out.println("----onStart----");
}

Activity学习(一):生命周期的更多相关文章

  1. Android Small插件化框架解读——Activity注册和生命周期

    通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...

  2. Activity完整的生命周期

    首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...

  3. 多个Activity交互的生命周期:

    一.多个Activity交互的生命周期: A Activity打开B Activity的时候:        A Activity                    B Activity     ...

  4. 三张图让你高速明确activity与fragment生命周期的异同点

    第一张图:activity的生命周期 第二张图:fragment的生命周期 第三张图:activity与fragment生命周期对照 补充:假设你还是不明确,请翻译一下你不理解的相应单词. ----- ...

  5. android:activity活动的生命周期

    掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余.你的应用程序将会拥有 ...

  6. Android零基础入门第75节:Activity状态和生命周期方法

    前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...

  7. Android活动(Activity)创建及生命周期

       Activity是Android的门面,可以与用户进行互动的重要模块,凡是在应用中可以看到的东西,都是放在活动中的.   在学习新的技术时,我喜欢将需要学习的技术与自己懂得技术进行类似比较,而活 ...

  8. Activity详解生命周期(Android)

    Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之 ...

  9. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  10. Activity组件的生命周期

    一.Activiy组件的三个状态: 1.前台状态(active) : 在屏幕的最上层,页面获得焦点,可以响应用户的操作2.可视状态(paused) : 不能与用户交互,但是还存在于可视区域内,它依然存 ...

随机推荐

  1. Django项目:CRM(客户关系管理系统)--10--04PerfectCRM实现King_admin注册功能02

    from django import conf #配置文件print("dj conf:",conf) #配置文件print("dj conf:",conf.s ...

  2. Spring_事务

    事务管理: 用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当做一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性 原子性 一致性 隔离性 持久性 Spring两 ...

  3. Leetcode876.Middle of the Linked List链表的中间节点

    给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式:[3,4 ...

  4. 【风马一族_php】数组函数

    原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负  2016-11-09 15:56:26 数组 函数 php- ...

  5. log4j日志系统

    在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...

  6. PHP开发api接口安全验证的实例,值得一看

    php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道 ...

  7. 删除指定节点Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  8. 在Eclipse中添加Tomcat

    在Eclipse中开发web或开启web服务需要Tomcat的支持,在添加Tomcat之前要清楚你的Eclipse版本,如果你的Eclipse是javvEE版的就可以直接安装Tomcat,如果不是就需 ...

  9. git day01笔记 常用操作命令 快照 推送 拉取

    ansible 批量在远程主机上执行命令或者脚本 git   做版本控制的一个工具 ## git操作命令: 工作区:当前编辑的区域 缓存区:add 之后的区域 本地仓库:commit之后的区域 远程仓 ...

  10. API管理的五大规则

    http://www.csdn.net/article/2012-12-18/2812929-5-Rules-For-API-Management 1. 设计 开发人员使用API访问各种不同的类,并且 ...