非用户行为把activity不可见的时候,例如电话忽然来了==
/**
* 重新创建恢复缓存的数据
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.i("onRestoreInstanceState",savedInstanceState.getString("name"));
super.onRestoreInstanceState(savedInstanceState);
}
/**
* 被摧毁前保存缓存的一些数据
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("name", "简明现代魔法");
super.onSaveInstanceState(outState);
}
在android里,有4种activity的启动模式,分别为:
- ·standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。
- ·singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。
- ·singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。
- ·singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。
这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。
相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。
Intent intent = new Intent(ReorderFour.this, ReorderTwo.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent);










