在Activity的oncreate方法中如果跳转到别的activity,会发生什么

真是日*狗,即便你跳转到别的Activity,其余的代码一样执行

首先做实验,证明它就是这样发生的

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
                init();
		System.out.println("aaaaaaaaaaaaaaaaaa");
		new Thread(new Runnable() {

			@Override
			         public void run() {
				// TODO Auto-generated method stub
				handler.sendEmptyMessage(1);
				System.out.println("bbbbbbbbbbbbbbbbbbb");
			}
		 }).start();

			System.out.println("ccccccccccccccccc"+i);

	}
        private void init() {
     
            Intent intent=new Intent(this,TwoActivity.class);
            startActivity(intent);
   }

可能你会觉得aaaaaaaaaa不会被打印出来,我刚开始也是这么觉得

但是aaa bbb cccc 都输出 出来啦  ,而且还跳转啦,那么问题来啦 怎么会这样

我真的觉得特别好奇,难道是我手机的问题,结果显然不是

一般情况下,跳转到其他Activity都会执行onpause()方法,

对问题就在这!!!!!!!!!!

然后我在onpuase 中这么写

@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		System.out.println("pause--pause---pause");
		super.onPause();
	}

结果在 a b c 之后打印出onpause ,为什么呢????

经过一番思考,得出结论

由于在跳转时,这个activity的oncreate方法 并没有执行完毕,所以不会执行onpause ,知道oncreate方法 执行完毕才会执行onpause ,

那么另一个问题来啦???到底init()方法执行时,有没有跳转,于是我在另一个activity 的oncreate方法 中这样写

protected void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	System.out.println("two two two ");
}

看看打印结果 应该就有结论

08-09 16:46:37.926: I/System.out(20472): pause--pause---pause

08-09 16:46:38.005: I/System.out(20472): two two two

小伙伴们 看到啦 吗

只有activity 的oncreate的方法 执行完毕 才会跳转

如果在 oncreate方法中加上

           for (int i = 0; i < Integer.MAX_VALUE; i++) {
			System.out.println("ddddddddddddddddd"+i);
		}

结果就是  一直循环   只有执行完毕这个循环 才会 执行onpause  然后才会跳转

切记啊!!!!!!!!!!!!! ocreate 方法中    尽量不要写 startActivity()

如果有这个             别的初始化方法就不用执行啦  尽快结束 oncreate 方法

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 12:40:25

在Activity的oncreate方法中如果跳转到别的activity,会发生什么的相关文章

在Activity的onCreate方法中显示PopupWindow导致异常的原因分析及解决方案

一.前言 在某些情况下,我们需要一进入Activity就显示PopupWindow,比如常见的选择界面.但由于PopupWindow是依附于Activity的,如果Activity没有创建完成,Activity还没完全显示出来就显示PopupWindow的话,会出现异常现象. 二.问题复现 我在Activity的onCreate()方法中调用如下方法: public void show( ){ if( null != mPopupWindow ){ mPopupWindow.showAtLoca

Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?

在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_view); myview = ViewUtils.find(this, R.id.myview); getViewSize("onCr

HackThirteen 在onCreate()方法中获取View的宽度和高度

1.概要: Android源代码中很多模块都使用了post()方法,深入理解框架曾运行机制对于避开类似于本例中的小陷阱是很重要的 2.问题提出: 如果开发一些依赖于UI控件的宽和高的功能,开发者可能会用到View的getHeight()和getWidth()方法.试图在Activity的 onCreate()方法中获取控件的宽和高.遗憾的是如果开发者在onCreate()方法中调用上述方法,会发现返回值都是0. 3.解释问题原因: 当onCreate()方法被调用时,会通过LayoutInfla

android中按back键返回上一个activity,如何重新调用上一个activity的oncreate方法?

默认情况下是不会调用的. @Override public void onBackPressed() { String titleStr = edittitle.getText().toString(); String contentStr = editcontent.getText().toString(); if (title.equals(titleStr) && content.equals(contentStr)) { super.onBackPressed(); } else

如何在onCreate方法中获取视图的宽度和高度

你可以通过视图的getWidth()和getHeight()来获取视图的宽度和高度. 但是,可能会让你失望的是,如果你直接在onCreate方法内调用这两个函数,你会的到0. 为什么呢? 这是因为,当onCreate被调用的时候,视图的内容正在被LayoutInflater来填充xml布局. 这个过程会填充布局,但是暂时不会设置视图的大小. 那么视图到底什么时候获得自己的大小尺寸呢? 实际上是在Layout以后,而layout又是在onCreate调用以后. 那么,如果我们要在onCreate方

如何在onCreate()方法中,获取得到控件的宽度和高度?小意思!

在onCreate()方法中,如果想获得控件的宽度高度,那就要使用下面的方法了. orderTime.post(new Runnable() { @Override public void run() { System.out.println("高"+orderTime.getHeight()); System.out.println("宽"+orderTime.getWidth()); } }); 其中,orderTime是一个TextView.当然,这里只是一个

onCreate方法中saveInstanceState参数的作用

示例代码: public class MainActivity extends ActionBarActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (null != savedInstanceState) { in

android 在onCreate方法中获得view的宽高

view在绘制完成后才会有自己的宽高,所以在onCreate中要获得view的宽高可以通过以下4中方法: 1.ViewTreeObserver:监听界面绘制事件,在layout时调用,使用完毕后记得removeListener 2.view.post,因为runnable对象会在view的measure.layout后触发 3.重写onLayout方法 4.使用getMeasuredWidth.getMeasuredHeight获得测量后的宽高,可能跟view的真实宽高有差距

Android在onCreate()方法中动态获取TextView控件的高度

正好朋友项目里遇到了给写了个小Demo: 这个监听器看名字也知道了.就是在绘画完毕之前调用的,在这里面能够获取到行数.当然也能够获取到宽高等信息 package com.example.textviewtest; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Vie