`
阅读更多

                     重中之重,在面试腾讯与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的方法意味着被销毁,则不入栈。


 

  • 大小: 77.2 KB
  • 大小: 72.8 KB
  • 大小: 58.3 KB
  • 大小: 9 KB
  • 大小: 14.2 KB
  • 大小: 15.5 KB
  • 大小: 15.4 KB
  • 大小: 115.4 KB
  • 大小: 12.9 KB
  • 大小: 9 KB
  • 大小: 16.3 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics