你了解Android中的Activity吗?

文章目录

    • 一、何为Activity
    • 二、Activity的生命周期
    • 三、Activity/ActionBarActivity/AppCompatActivity的区别:

一、何为Activity

  Android应用中通常由一个或者多个基本组件组成,我们平时看到的Android应用中最常用的组件就是Activity。Activity、BroadcastReceiver、ContentProvider和Service合称Android的四大组件。Activity是Android的四大组件中最直观的一个,可以狭义地理解为Activity是与用户交互的界面,可以处理与用户交互的事件。简单说就是看到的界面。常见的 Activity 类型有 ListActivity,FragmentActivitiy,TabAcitivty 等。当然开发中可根据自己的功能设计自己的公共基类: BaseActivity。
在我们创建完一个Android工程后会有以下MainActivity视图:
你了解Android中的Activity吗?_第1张图片

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

  可以看到,默认实现的onCreate()方法非常简单,就是调用了父类的onCreate()方法。
Activity主要负责于和用户交互,而谈及与用户交互则不得不说Android中的View组件了。View组件是所有UI控件、容器控件的基类,可以说View组件就是Android应用中用户实实在在看到的部分。但View组件需要放到容器组件中,或者使用Activity将它显示出来。如果我们需要通过某个Activity把指定的View显示出来,调用Activity的setContentView()方法即可。

setContentView()方法可接受一个View对象作为参数,例如:
你了解Android中的Activity吗?_第2张图片

//创建一个线性布局管理器
LinearLayout layout = new LinearLayout(this);
//设置该Activity显示Layout
setContentView(layout);

  这两行代码创建了一个LinearLayout对象(它是 ViewGroup的子类,ViewGroup又是View的子类),接着调用Activity的setContentView(layout)把这个布局管理器显示出来。
  我们经常使用setContentView()方法接受一个布局管理器资源的ID作为参数,例如:
在这里插入图片描述

//设置该Activity显示main.xml文件定义的View
setContentView(R.layout.activity_main);

  在初始代码中我们可以看到这一行代码:
在这里插入图片描述

setContentView(R.layout.activity_main);

  这一行代码主要是说明当前activity引用的是activity_main布局文件,在Android项目中添加的任何资源都会在R文件中生成一个相应的资源id,因此我们的activity_main.xml布局文件的id现在应该是已经添加到R文件中了。在代码中引用布局文件的方法你也看到了,只需要调用R.layout.activity_main就可以得到activity_main.xml布局的id,然后将这个值传入setContentView()方法即可。
  注意:这里我们使用的R是我们工程包下面的R文件,AndroidSDK还会自动提供一个android包下的R文件,注意两者是有区别的,别引用错了。

二、Activity的生命周期

  官方文档中对Activity的生命周期有个比较经典图,如下图一所示:
你了解Android中的Activity吗?_第3张图片
  相信不少人已经看过这个流程图,在此就不多做赘述,我简单的说说这几个过程:
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。
这就是一次完整的常规activity生命周期。

  从某种角度看,Activity为Android应用提供了可视化用户界面,如果该Android应用需要多个用户界面,那么这个Android应用将会包含多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶。

三、Activity/ActionBarActivity/AppCompatActivity的区别:

  在开始讲解创建Activity之前要说下这三个的一个区别: Activity就不用说啦,后面这两个都是为 了低版本兼容而提出的提出来的,他们以前都在v7包下,现AppCompatActivity在androidx包 下, ActionBarActivity已被废弃,从名字就知道,ActionBar~,而在5.0后,被Google弃用了, 现在用 ToolBar…而我们现在在Android Studio创建一个Activity默认继承的会是: AppCompatActivity! 当然你也可以只写Activity,不过AppCompatActivity给我们提供了一些新的 东西而已! 两个选一个,Just you like。

你可能感兴趣的:(Android)