Activity练习 一 关于Activity A的启动Activity B的过程

 

本人所有文章,暂时只作为个人闲暇之余的爱好,如偶有客官路过,权当我是打酱油的吧。

 

描述Activity的生命周期的文章很多,启动过程大致如下:

 

这里有一个疑问,启动过程的所有函数必然会被调用到吗?顺序一定严格相同吗?

我做了一个试验,主要包括以下几点:

1、分别在一个Activity A的onCreate、onStart、onResume中启动另外一个Activity B,有什么区别吗?

2、如果从Activity B返回,那么Activity的onStart、onResume中又会重新启动Activity B,会是什么样的现象呢?

代码如下:

 

package com.maxuming.sparrow;


import com.maxuming.sparrow.activity.MyMainActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class SparrowActivity extends Activity {
	
	/*
	 * 为了演示方便,我们把onResume代码写在最前面
	 * @see android.app.Activity#onResume()
	 * @Override
	 */
    public void onResume(){
    	super.onResume();
    	
    	Log.d(TAG, "Enter onResume!");
    	//	start();
    	//	打开这个start,关闭其它几处start,结果毫无疑问:
    	//	启动过程为:  onCreate	onStart		onResume	->	新的Activity
    	//	从新的Activity返回后: onStart	onResume	->	新的Activity
    }
	
    @Override
    public void onStart(){
    	super.onStart();
    	
    	Log.d(TAG, "Enter onStart!");
    	//	start();
    	//	打开这个start,关闭其它几处start
    	//	发现启动过程和从新的Activity返回后的执行过程,和把start放在onResume中居然是一样的。
    	//	启动过程为:  onCreate	onStart		onResume	->	新的Activity
    	//	从新的Activity返回后: onStart	onResume	->	新的Activity
    }
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.main);
    	
    	Log.d(TAG, "Enter onCreate!");
    	start();
    	//	打开这个start,关闭其它几处start
    	//	发现启动过程和把start放在onResume中居然也是一样的。
    	//	启动过程为:  onCreate	onStart		onResume	->	新的Activity
    	//	当然,从新的Activity返回后,结果稍有不同
    	//	从新的Activity返回后: onStart	onResume	
    }
    
    /*
     * 启动一个新的Activity
     */
	private void start() {
		Intent intent = new Intent(this, MyMainActivity.class);
		startActivity(intent);
	}
	private static final String TAG = "Main";
}



这个试验可以说明:

1、不管什么情况下,正常启动的Activity的调用方法过程必然是:onCreate, onStart, onResume, 这个过程并不会因为在onCreate、onStart方法的行为而改变;

2、如果在Activity A的onCreate或者onStart中启动一个新的Activity,那么这个新的Activity的onCreate也必然会在Activity A的Resume之后被执行。

3、是不是可以猜测一下Android内核的做法呢? 启动一个Activity B只是把Activity B的相关内容放到Stack的最上面,等待之前Activity A的逻辑执行之后,才会去真正的启动Activity B的逻辑呢。

4、这个过程对于习惯于面向过程(尤其是C语言)的朋友来说很容易理解错误。

 

那么如果在onCreate onStart onResume中调用两次或者三次start,现象又如何呢?

测试发现:

无论调用几次start,最后启动的Activity B只有一个,并且都在Activity A的onResume之后才会启动。

 

那么如果在一个Activity中启动一个Service,过程又会是什么样的呢?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值