最近开始学习安卓,准备在毕业后找相关的工作。在此记录下相关知识点,方便后面复习。
活动的定义(activity)
activity是一种包含用户界面的组件,为用户提供了完成操作指令的窗口。当activity创建完成后,我们需要使用setContentView()方法对活动进行调用。
活动的生命周期
1.活动状态
每个活动在生命周期中最多包含四种状态:
(1)运行状态:活动位于返回栈的栈顶
(2)暂停状态:活动不再位于返回栈的栈顶,但这个活动仍然可见;当一个非全屏或者透明的活动放在栈顶时,进入此状态
(3)停止状态:活动不再处于返回栈的栈顶,并且完全不可见;当活动被另一个活动完全覆盖或者用户点击Home键时,进入此状态。
(4)销毁状态:活动从返回栈移除后就变成销毁状态
2.活动的生存期
Activity类中定义了7个回调方法
onCreate(): 该方法会在活动第一次被创建时调用,在此方种中应完成活动的初始化操作
onStart(): 活动由不可见变为可见时调用
onResume(): 在活动准备好和用户进行交互时调用。此时活动一定处于返回栈顶,且是运行状态
onPause(): 该方法在启动或者恢复另一个活动的时候调用
onStop(): 该方法在活动完全不可见的时候调用
onDestroy(): 该方法在活动被销毁时调用,完成内存释放相关操作
onRestart(): 该方法在活动由停止变为运行时调用,活动被重新启动
onStart()与onDestroy()相对应(完整生存期)
onStart()与onStop()相对应(可见生存期)
onResume()与onPause()相对应(前台生存期)
图一 活动的生命周期(原图来自第一行Android)
活动的启动模式
活动有四种启动模式,分别是:standard,singleTop,singleTask和singleInstance
(1)standard
standard是活动的默认启动模式,每点击一次按钮就会创建一个新的activity实例。同样的,需要按相同次数的back键才能推出程序。
(2)singleTop
当活动的启动模式为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则直接使用它,不会在创建一个新的活动实例。
singleTop解决了standard的弊端
(3)singleTask
如果活动没有处于栈顶位置,则使用singleTop模式依旧会创建多个实例。
使用singleTask模式,每次启动该活动时系统实现会在返回栈中检查是否存在该活动的实例,如果有,则直接使用,如果没有,则创建。
(4)singleInstance
每个程序都有自己的返回栈,同一个活动在不同的返回栈中入栈时,必然创建了新的实例。而使用singleInstance模式创建活动时,会有一个单独的返回栈管理这个活动,不管是哪个应用程序来访问这个活动,都共用一个返回栈。
singleInstance模式解决了共享活动实例的问题。
一些总结
activity之间通信的方式
(1)通过Intent进行通信
Intent不仅指明了当前组件想要执行的动作,还可以在不同组件间传递数据。具体用法如下:
发送数据给MainActivity2活动
tmp = editText.getText().toString(); //从editText中获得数据,传递给Main2Activity活动
Intent intent = new Intent(MainActivity.this , Main2Activity.class);
intent.putExtra("title" , tmp);
startActivity(intent);
从MainActivity活动中获得数据,并显示在textView中
Intent intent = getIntent();
str = intent.getStringExtra("title");
textView.setText(str);
后面三种方法还没具体了解,等了解了在补充代码
(2)借助类的静态变量来实现
(3)借助全局变量来实现
(4)通过数据持久化方案传递数据,如:文件存储,SharedPreferences存储,SQLite数据库,LitePal数据库等
活动回收
如果我们想解决活动被回收临时数据得不到保存的问题,可以使用onSaveInstanceState()方法。该方法可以在活动被回收以前调用,使用putString()保存字符串,putInt()保存整形数据。onCreate()方法中有个Bundle类型的参数savedInstanceState,可以通过savedInstanceState将对应的值取出。
当两个活动进行跳转时,必然会执行的是哪几种方法?
假设有两个活动A和B,我们想在A活动中激活B。
这时,A会调用onPause()方法,进入暂停状态
B会调用onCreate(),onStart(),onResume()进入运行状态
如果B是透明的,或是对话框,或没有完全覆盖A,则A不会调用onStop()方法;从B返回到A时,A调用onResume()
若B完全覆盖了A,则调用A的onStop()进入停止状态;从B返回A时,如果A没有被系统回收,调用onRestart(),onCreate();如果已经被系统回收,则调用onCreate(),onStart(),onResume()
如果B已经存在栈中,则不会调用onCreate()。
先写这么多,剩下的等散步回来在补充。。。