经过前面多天的了解,现在可以确信一点: activity提供了用户和程序交互的界面。

而且android里有四大组件:Activity,Service,BroadcastReceiver,ContentProvider.

Activity的使用,标准化流程大概如此:

  1. 继承android的Activity类
  2. 重写需要实现的方法
  3. 设置显示布局
  4. 在AndroidManifest.xml文件中,注册Activity

Activity的生命周期:

onCreate();   创建

onStart();    运行

onResume();  获取焦点

onPause();   失去焦点

onStop();   暂停

onDestroy();   销毁

onRestart();    重新导航到活动

如下图:(自己手绘一遍,感觉清晰一点儿)

Activity的四种状态

  • 活动状态 (Active / Running)   ------Actitivy处于界面最顶端
  • 暂停状态 (Paused)    -----Activity失去焦点,但对用户可见
  • 停止状态(不可见状态) ----Activity被完全遮挡,但保留所有状态和成员信息
  • 非活动状态(killed)   ------Activity被终止

创建 –> 销毁

onCreate() –> onStart() –> onResume() –> onPause() –> onStop() –>onDestroy()


从启动到后台,再到前台的生命周期

onCreate() –> onStart() –> onResume() –> onPause() –> onStop() –> onRestart() –> onStart() –>onResume()

(注意:这里的停止状态,activity被完全遮挡,但是保留所有状态和成员信息)


从启动到失去焦点,再到获取到焦点

onCreate() –> onStart() –> onResume() –> onPause() –>onResume()


玩一玩:

新建一个工程,只用改一改 MainActivity.java就可以了

package com.example.activitytest;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {
    private String Tag = "tag";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(Tag, "onCreat()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(Tag, "onStart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(Tag, "onResume()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(Tag, "onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(Tag, "onStop()");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(Tag, "onDestroy()");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(Tag, "onRestart()");
    }

}

然后在LogCat中建立一个Filter

运行开始看Log

进行如下操作,切换一个Activity

此时画面为:

再点“返回”,即下图

此时回到手机主页面了,真的销毁了


我猜想,如果点击该activity如果弹出一个小的对话框,但是原来的activity还是可见的,那就会上演

onCreate() –> onStart() –> onResume() –> onPause() –>onResume()

总之先这样,如果以后发现不对的话,再来修改吧。

再来说说Activity的更多相关文章

  1. 浅谈Android之Activity生命周期

     Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...

  2. 理解 Activity.runOnUiThread

    在开发 Android 应用的时候我们总是要记住应用主线程. 主线程非常繁忙,因为它要处理绘制UI,响应用户的交互,默认情况下执行我们写下的大部分代码. 好的开发者知道他/她需要将重负荷的任务移除到工 ...

  3. Tab指示符——Indicator

    先说说我们的思路吧. 其实思路也很简单,就是在咱们的导航下面画一个小矩形,不断的改变这个矩形距离左边的位置. 思路就这么简单,有了思路,接下来就是实现了,看代码: public class Indic ...

  4. 一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!

    ViewPager的基本用法不必多说,这都很简单,我们可以在ViewPager中加载一个ImageView,也可以加载一个Fragment,这都是目前非常常见的用法.那么我今天说的是ViewPager ...

  5. 玩转Android之MVVM开发模式实战,炫酷的DataBinding!

    C# 很早就有了MVVM的开发模式,Android手机中的MVVM一直到去年Google的I\O大会上才推出,姗姗来迟.MVVM这中开发模式的优点自不必多说,可以实现视图和逻辑代码的解耦,而且,按照G ...

  6. 卡片式ViewPager,一屏展示多个pager item,设置高度不一致的tabBar

    ViewPager的基本用法不必多说,这都很简单,我们可以在ViewPager中加载一个ImageView,也可以加载一个Fragment,这都是目前非常常见的用法.那么我今天说的是ViewPager ...

  7. static关键字所导致的内存泄漏问题

    大家都知道内存泄漏和内存溢出是不一样的,内存泄漏所导致的越来越多的内存得不到回收的失手,最终就有可能导致内存溢出,下面说一下使用staitc属性所导致的内存泄漏的问题. 在dalvik虚拟机中,sta ...

  8. Android进阶系列之源码分析Activity的启动流程

    美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...

  9. Activity之间传递参数(三)

    ------siwuxie095 传递值对象,即自定义的有数据类型的对象 1.首先 new 一个 class:User,用于创建自定义对象,同时右键 Generate 出 Constructor.se ...

随机推荐

  1. iPhone 如何设置彩信 ?

    使用 iPhone 时,不能使用短信发送图片,肿么办 ? 当然,它会提示你,要你设置彩信.关键是,该怎么设置彩信呢 ? · 首先,打开 “设置” - “蜂窝移动网络” - “蜂窝移动数据网络” (1) ...

  2. Eclipse —— java文件修改后不能及时体现

    有没有遇到过这么一种情况:某一个对象某一属性,先设值为 1 .打印出来是 1.再设值为 2 .打印出来仍是 1 ? …… 原来是工具Eclipse设置的问题. 你检查一下,Eclipse 工具栏 - ...

  3. SCSS(SASS、CSS)学习

    看的这篇文章 http://www.frostsky.com/2014/07/sass-scss/ 写的还比较清晰 SASS是CSS3的一个扩展,增加了规则嵌套.变量.混合.选择器继承等等.通过使用命 ...

  4. Machine Learning for hackers读书笔记(十)KNN:推荐系统

    #一,自己写KNN df<-read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\10-Recommendations\\ ...

  5. Tyvj 1030 乳草的入侵

    以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...

  6. Jquery源码中的Javascript基础知识(一)

    jquery源码中涉及了大量原生js中的知识和概念,文章是我在学习两者的过程中进行的整理和总结,有不对的地方欢迎大家指正. 本文使用的jq版本为2.0.3,附上压缩和未压缩版本地址: http://a ...

  7. HDU 2577 How to Type (DP,经典)

    题意: 打字游戏,求所按的最少次数.给出一个串,其中有大小写,大写需要按下cap键切换到大写,或者在小写状态下按shift+键,这样算两次,打小写时则相反.注意:在打完所有字后,如果cap键是开着的, ...

  8. mysql应用存储过程批量插入数据

    --批量插入数据的sql语句 delimiter $$ DROP PROCEDURE IF EXISTS `test.sp_insert_batch` $$ CREATE DEFINER =`root ...

  9. 【C#学习笔记】Hello World

    using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { Conso ...

  10. 理解matplotlib绘图

    matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件.它能让使用者很轻松地将数据图形化 ...