Android Activity
Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作
每个 Activity 都会获得一个用于绘制其用户界面的窗口
窗口通常会充满屏幕,但也可小于屏幕并浮动在其它窗口之上
Activity 用于显示用户界面,用户通过 Activity 交互完成相关操作
Activity 的生命周期
-
onPause() 和 onStop() 被调用的前提是 打开了一个新的 Activity
onPause() 是旧 Activity 还可见的状态
onStop() 则是旧 Activity已经不可见
-
AlertDialog 和 PopWindow 不会触发上述两个回调方法的
Activity / ActionBarActivity / AppCompatActivity 的区别
-
ActionBarActivity 和 AppCompatActivity 都是为了低版本兼容而提出的提出来的,他们都在 v7 包下
-
ActionBarActivity 已被废弃,在 5.0+ 版本弃用了,可以使用 ToolBar 代替
-
Android Studio 创建一个 Activity 默认继承的是:AppCompatActivity
Activity 的创建流程
-
自定义
Activity
类名,继承Activity
类或者其它子类,比如AppCompatActivity
class MainActivity extends AppCompatActivity
-
重写
onCreate()
方法,然后在该方法中调用setContentView()
设置要显示的视图@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
-
在
AndroidManifest.xml
中对Activity
进行注册和配置<activity android:icon="图标" android:name="类名" android:label="Activity 要显示的标题" android:theme="要应用的主题" > </activity>
-
调用
startActivity(Intent)
启动Activity
Intent it = new Intent(MainActivity.this, MsActivity.class); startActivity(it);
-
调用
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 拥有了持久化的能力,让我们的应用 拥有了系统 关机后重启 的数据恢复能力