1、androi基本的生命周期状态:Created(创建),Started(启动),Resumed(恢复),Paused(部分隐藏),Stoped(全部隐藏),Destroyed(销毁)。

2、其中Resumed(恢复),Paused(部分隐藏),Stoped(全部隐藏)为静态状态,一旦进入该状态会持续一段时间,直到有干预进入其他状态;Created(创建),Started(启动)为暂时状态,是中间过渡状态。

3、android生命周期状态转化关系图:

4、指定你的程序第一次启动的activity,你需要在android.mainfest.xml文件中配置:

<activityandroid:name=".MainActivity"android:label="@string/app_name"> 
    <intent-filter>  
android.intent.action.MAIN"/> 
android.intent.category.LAUNCHER"/> 
   </intent-filter>  
</activity>

5、建议在onDestroy()中处理有可能导致内存泄漏的资源,比如你在onCreate()或其他什么地方启动了线程等操作,建议此时杀死他们。

6、建议在onPause()中做下面的事情:

  停止动画或者是其他正在运行的操作,因为那些会导致CPU浪费

  提交没有保存的改变,但是仅仅是在用户离开时,期待保存的内容

  释放系统资源,例如broadcastreceivers,sensors(like GPS),或者是其他任何会影响到电量的资源

【注】当你的activity处于暂停状态,Activity 实例是驻留在内存中的,并且在activity恢复的时候重新调用。你不需要在恢复到Resumed状态的一系列回调方法中重新初始化组件。

7、建议在onResume()中执行下面的操作:

  初始化在onPause()中释放掉的组件

  执行那些activity每次进入resumed state都需要的初始化动作,比如开始动画或那些只有在获得用户焦点时才需要的组件

8、一旦你的activity停止了,系统会在不再需要这个activity时摧毁它的实例。在极端情况下,系统会直接杀死你的app进程,并且不执行activity的onDestroy()回调方法,因此建议在onStop()中执行释放资源的操作,避免内存泄漏。尽管onPause()方法是在onStop()之前调用,但建议在onStop()中执行那些CPU intensive的shut-down操作,例如writing information to database。

9、onStart()方法会在每次你的activity可见时都会被调用, onRestart() 方法则是只在activity从stopped状态恢复时才会被调用。在onStop()里面做了哪些清除的操作就应该在onStart()里面重新把那些清除掉的资源重新创建出来。

【注】当你的activity已经停止,Activity 对象会保存在内存中,并且在activityresume的时候重新被调用到。你不需要在恢复到Resumed state状态前重新初始化那些被保存在内存中的组件。系统同样保存了每一个在布局中的视图的当前状态,如果用户在EditText组件中输入了text,它会被保存,因此不需要保存与恢复它。即使系统会在activity stop的时候销毁这个activity,它仍然会保存 View objects(such as text in an EditText)到一个 Bundle 中,并且在用户返回这个activity时恢复他们。

10、如果你想要处理你的activity被意外destory时,则会用到onSaveInstanceState()和onRestoreInstanceState()这两个回调函数。当你的activity开始Stop,系统会调用 onSaveInstanceState() ,因此你的Activity可以用键值对的集合来保存状态信息。这个方法会默认保存Activity视图的状态信息,例如在 EditText 组件中的文本或者是 ListView 的滑动位置。为了给Activity保存额外的状态信息,你必须实现onSaveInstanceState() 并增加key-value pairs到 Bundle 对象中。

11、当你的Activity从Destory中重建。你可以从系统传递给你的Activity的Bundle中恢复保存的状态。 onCreate() 与 onRestoreInstanceState() 回调方法都接收到了同样的Bundle,里面包含了同样的实例状态信息。因为 onCreate() 方法会在第一次创建新的Activity实例与重新创建之前被Destory的实例时都被调用,你必须在你尝试读取 Bundle 对象前Check它是否为null。如果它为Null,系统则是创建一个新的Activity instance,而不是恢复之前被Destory的Activity。你也可以选择实 onRestoreInstanceState(),而不是在onCreate方法里面恢复数据。 onRestoreInstanceState()方法会在 onStart() 方法之后执行. 系统仅仅会在存在需要恢复的状态信息时才会调用onRestoreInstanceState() ,因此你不需要检查 Bundle 是否为Null。

【注】总是需要调用onRestoreInstanceState()和onSaveInstanceState()方法的父类实现,这样默认的父类实现才能保存视图状态的信息。  

12、如何实现一个符合用户期待的app,你需要注意下面几点:

  • 当使用你的app的时候,不会因为有来电通话或者切换到其他app而导致程序crash。
  • 当用户没有激活某个组件的时候不要消耗宝贵的系统资源。
  • 当离开你的app并且一段时间后返回,不要丢失用户的使用进度。
  • 当设备发送屏幕旋转的时候,不会crash或者丢失用户的使用进度。