Android Activity

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作

每个 Activity 都会获得一个用于绘制其用户界面的窗口

窗口通常会充满屏幕,但也可小于屏幕并浮动在其它窗口之上

Activity 用于显示用户界面,用户通过 Activity 交互完成相关操作

Activity 的生命周期

  1. onPause() 和 onStop() 被调用的前提是 打开了一个新的 Activity

    onPause() 是旧 Activity 还可见的状态

    onStop() 则是旧 Activity已经不可见

  2. AlertDialogPopWindow 不会触发上述两个回调方法的

Activity / ActionBarActivity / AppCompatActivity 的区别

  1. ActionBarActivity 和 AppCompatActivity 都是为了低版本兼容而提出的提出来的,他们都在 v7 包下

  2. ActionBarActivity 已被废弃,在 5.0+ 版本弃用了,可以使用 ToolBar 代替

  3. Android Studio 创建一个 Activity 默认继承的是:AppCompatActivity

Activity 的创建流程

  1. 自定义 Activity 类名,继承 Activity 类或者其它子类,比如 AppCompatActivity

    class MainActivity extends AppCompatActivity
    
  2. 重写 onCreate() 方法,然后在该方法中调用 setContentView() 设置要显示的视图

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
  3. AndroidManifest.xml 中对 Activity 进行注册和配置

    <activity
        android:icon="图标"
        android:name="类名"
        android:label="Activity 要显示的标题"
        android:theme="要应用的主题" >
    </activity>
    
  4. 调用 startActivity(Intent) 启动 Activity

    Intent it = new Intent(MainActivity.this, MsActivity.class);
    startActivity(it);
    
  5. 调用 finish() 直接关闭当前 Activity

    finish();
    

    其实我们可以把它写到启动第二个 Activity 的方法中,当启动了第二个 Activity 时就会关闭第一个 Activity

注意:

Android 中的四大组件,只要定义了,无论用没用,都要在 AndroidManifest.xml 对 这个组件进行声明,不然运行时程序会直接退出,报 ClassNotFindException

onCreate() 方法

在重写 Activity 的 onCreate() 方法时会发现有两个重载

protected void onCreate(Bundle savedInstanceState)
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
}

官方文档只显示了一个参数的版本

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

第二个参数时数据持久化相关的,这是 5.0+ 提供的新的方法,如果要使用它,必须在配置文件为 Activity 设置一个属性

android:persistableMode="persistAcrossReboots"

配置好了之后,我们的 Activity 就拥有了持久化的能力了

一般情况下会搭配另外两个方法来使用

public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) 
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) 

方法会在发生以下情况的时候调用

  • 点击 home 键回到主页或长按后选择运行其他程序
  • 按下电源键关闭屏幕
  • 启动新的Activity
  • 横竖屏切换时,肯定会执行,因为横竖屏切换的时候会先销毁 Activity,然后再重新创建

也就是说

当系统 "未经你许可" 时销毁了你的 activity,则 onSaveInstanceState 会被系统调用, 这是系统的责任,因为它必须要提供一个机会让你保存你的数据 ( 你可以保存也可以不保存)

方法和 onCreate 同样可以从取出前者保存的数据,一般是在 onStart()onResume() 之间执行

之所以有两个可以获取到保存数据的方法,是为了避免 Activity 跳转而没有关闭, 然后不走 onCreate() 方法,而你又想取出保存数据

添加了 PersistableBundle 让 Activity 拥有了持久化的能力,让我们的应用 拥有了系统 关机后重启 的数据恢复能力

参考文档

  1. Android Activity

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.