重中之重,在面试腾讯与cvte移动端时,都被面试官问到了这个问题,当时觉得自己答的不太好,经常创建项目,倒是对这个流程不甚清楚,因此回来恶补,也正好学到了这里。
Activity是整个Android平台的基本构成,生命周期主要包含三个阶段:
1.运行态 程序显示前台,具有焦点,可以与用户交互,事件处理等
2.暂停态
程序失去焦点,被其他处于运行态的Activity取代在屏幕前台显示,如果切换后的Activity程序不 能 铺满整个窗口或者透明,该暂停态Activity仍旧可见,但是不可以与其交互
3.停止态
没有焦点,并且完全不可见,但是保留自身运行状态,停止运行的Activity会在系统需要时被结束
Activity生命周期控制方法:
用一个流程图来表示:
下面用一个实例来完成整个过程的解析,定义两个程序,完成跳转Intent,并在两个Activity程序中写好各自的生命周期方法:
定义FirstActivity布局文件
<Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="start" android:text="启动第二个Activity程序" />
放一个Button即可,并绑定单击事件处理方法
然后定义FirstActivity程序进行Intent跳转:
public class FirstActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { System.out.println("FirstActivity-->onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); } //启动单击事件 public void start(View view){ Intent it=new Intent(FirstActivity.this,SecondActivity.class); FirstActivity.this.startActivity(it); } //第一次创建界面时调用 public void onStart(){ System.out.println("FirstActivity-->onStart"); super.onStart();//调用父类方法 } //获得焦点时触发 public void onResume(){ System.out.println("FirstActivity-->onResume"); super.onResume();//调用父类方法 } //当启动其他Activity时触发 public void onPause(){ System.out.println("FirstActivity-->onPause"); super.onPause();//调用父类方法 } //当Activity不可见时调用 public void onStop(){ System.out.println("FirstActivity-->onStop"); super.onStop();//调用父类方法 } //当Activity重新运行时调用 public void onRestart(){ System.out.println("FirstActivity-->onRestart"); super.onRestart();//调用父类方法 } //当Activity销毁时调用 public void onDestroy(){ System.out.println("FirstActivity-->onDestroy"); super.onDestroy();//调用父类方法 } }
第二个程序异曲同工,只不过是将跳转改成:
Intent it=new Intent(SecondActivity.this,FirstActivity.class); SecondActivity.this.startActivity(it); SecondActivity.this.finish();
主布局函数两个分别如下
最后修改AndroidMainfest.xml文件。配置两个Activity程序
<activity android:name="com.example.activitylife.SecondActivity" android:label="@string/app_name" > </activity>
现在开始操作,首先启动应用程序,将输出:
然后按动按钮,将启动第二个Activity,将按顺序输出以下字眼:
现在我们按手机的返回键返回到第一个Activity:
我们运行发现,当第二个程序完全遮盖第一个程序时onstop才会调用,现在我们实验以下将第二个程序定义成对话框,并不遮盖第一个程序结果会怎样?
将AndroidMainfest定义第二个程序为对话框
<activity android:name="com.example.activitylife.SecondActivity" android:theme="@android:style/Theme.Dialog" android:label="@string/app_name" > </activity>
当启用第二个Activity时
打印出:
可见当第二个程序么哟完全覆盖第一个程序onStop并未调用
然后我们按返回键返回第一个程序
不调用第一个程序onStart界面,因为没有stop哪来start?
接下来我们按键返回第一个Activity
这里意味着按键返回第一个程序,表示之前所有操作都将重新执行。
学到这里大家都明白了Activity7大周期控制方法了吧。
其实多个应用程序也是一样的,多个Activity
相当于入栈一般,但是调用finish的方法意味着被销毁,则不入栈。