start Activity慢和finish Activity慢的原因

现有两个Activity, ActivityA和ActivityB.
1. 先说startActivity慢
    假如从ActivitA跳转到ActivityB很慢,大概5秒或更长, 两个Activity的生命周期大概是这样的:
    ActivityA: onPause()....然后等几秒后才执行onStop()
    这几秒钟在干吗呢?
    在执行ActivityB的onCreate(),onStart(),onResume()三个生命周期方法。完了再执行ActivityA的onStop();
    如果ActivityB的这三个生命周期方法没有做任何耗时事情,其实跳转是很快的。
	慢的原因就是在onCreae(),onStart(),onResume()三个生命周期方法中的其中一个做了耗时操作或者发了handler消息,
	然后在handler消息处理的地方做了耗时的事情。
	应对方案:
	1)不要在onCreate(),onStart(),onResume()中做任何耗时的事情
	2) 不要在onResume()发handler消息然后在handler中处理耗时工作。当然,如果只是发个handler处理简单逻辑是没问题的。系统要等待这个handler消息处理完了在往下走。
	2)如果要做耗时的事情(有些初始化工作必须要做),建议在onCreate()中发延时的handler消息,然后在handler消息接收中处理。
	startActivity慢跟ActivityA没多大关系。主要原因在你要跳转的那个ActivityB。
	
2. finish Activity慢
   接着前面说的,此时我们按back键从ActivityB退出到ActivityA, 大概也是5秒或更长,两个Activity的生命周期大概是这样的:
   ActivityB: onPause()....然后等几秒后才执行onStop(), onDestroy().
   这几秒钟在干吗呢?
   在执行ActivityA的onRestart(),onResume()两个生命周期方法。执行完了后再执行ActivityB的onStop()和onDestory();
   其实原因也是因为在onRestart()或onResume()做了耗时的操作,跟ActiviyB没多大关系。
   解决方案跟前面一样的,不要在onCreate(),onStart(),onResume()中做任何耗时的事情。
   另外,在退出ActivityB的时候,在onPause()中判断if(isFinishing()), remove所有handler消息,停掉长运行的子线程,把对象全部置为null(这样做其实没多大改善,只是能优化几毫秒也不能放过)
   finish ActivityB跟当前的ActivityB没多大关系,主要原因在你要返回的那个ActivityA. 网上说的那些要在finish的ActivityB中做各种回收,其实没点卵用。
   如果你从Launcher用命令启动ActivityB, 再按back键退出ActivityB, 即使不做任何回收操作,你会发现退出很快。因为launcher界面的onResume()没有任何耗时的操作。

 

你可能感兴趣的:(Android)