1.什么是Activity?
Activity是安卓的四大组件之一,用户可以用来交互完成某项任务,例如:打电话,照相,锁屏,发邮件等等。
通过setContentView()方法设置布局。在我们常用的MVC模式中,Activity主要负责控制层(controller);
2.Activity的生命周期?
onCreat()-->onStart()-->onRestart-->onResume()-->onPause()-->onStop()-->onDestroy()
public class MySample extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onStart() { super.onStart(); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } }
上面七个方法代表Activity生命周期的七个阶段,当被第一次创建的时候会执行onCreat()方法,这时候还没有界面的显示,所以我们一般在这个方法里对控件创建,获取,绑定;当创建完后,会执行onStart()方法并展示给用户,这时候是可见的;
onRestart()方法是在Activity被onStop后,但是没有被onDestroy,在再次启动此Activity时就调用onRestart(而不再调用onCreate)方法;如果被onDestroy了,则是调用onCreate方法。
onResume()获取到焦点,在这里就可以与组件进行交互了;onPause()可见但是失去焦点;onStop()用户界面已经不可见;onDestroy()时Activity被销毁。
3.如何保存activity的状态?
Activity的状态通常系统会自动保存,只有当我们需要保存额外的数据时才需要使用到这样的功能。一般来说如果不destroy掉Activity,activity重新回到前台数据和状态不会消失。如果activity可能呗系统销毁我们可以复写onSaveInstanceState()方法,在它里面可以传一个Bundle,下次我们启动这个activity是就可以在onCreat()方法里获取这个对象
4.两个Activity跳转时必然会执行哪些方法?
一般情况下两个activity,分别叫做A和B,在A里面激活B,那么A会执行onPause(),B会执行onCreat(),onStart(),onResume()之后,B窗体覆盖A,A在执行onStop(),如果B是透明的A就不调用onStop方法。
5.横竖屏切换是的生命周期的次数?
不设置activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;
设置activity的android:configChanges=“orientation”时, 切屏会重新调用各个生命周期,切横屏、竖屏时都只会执行一次,但是竖屏最后多打印一条onConfigurationChanged();
设置activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged(),横屏一次,竖屏两次;
6.Activity的四种启动模式。
singleTop和standard模式比较,singleTop当跳转的activity位于栈顶时,不会重新创建一个activity实例,而是直接跳到栈顶的那个activity实例;singleTask和singleInstance模式多只创建一个实例,在这种模式下不论跳转的对象是不是位于栈顶,都不会重新创建一个实例
7.如何推出activity?如何安全推出已调用多个activity的application?
通常推出activity只需按back键,或者finish掉就可以了
可以通过application添加打开的activity和销毁activity,代码如下:
public class MyApplication extends Application { private List<Activity> activityList = new LinkedList<Activity>(); private static MyApplication application; public MyApplication(){ } public static MyApplication getInstance(){ if(null == application){ application = new MyApplication(); } return application; } public void addActivity(Activity activity){ activityList.add(activity); } public void exit(){ for(Activity a : activityList){ a.finish(); } } } MyApplication.getInstance().addActivity(this);每打开个Activity就掉用}
发特定广播销毁,
递归销毁,打开新的activity使用startActivityForResult(),在onActivityResult()中处理关闭