1. 活动被回收时解决
返回栈中的Activity在系统内存不够时,有可能会被系统回收,这时再点击返回栈也会回到Activity中,但是这是重新启动了这个Activity,我们之前在这个Activity中输入的数据全部消失,这会使用户体验下降
解决方案:
使用onSaveInstanceState()回调方法,这个方法会保证一定在活动呗回收之前调用,因此我们可以通过这个方法来解决活动被回收是临时数据得不到保存的问题
具体实现:
在Activity中重写OnSaveInstanceState()方法
protectedvoid OnSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outstate.putString(“data_key”,”content”);
}
在onCreate()方法中使用
if(savedInstanceState!= null){
String tempData =savedInstanceState.getString(“data_key”);
}
//这里进行数据的一系列操作
2. 活动的启动模式
1) standard(默认模式)
系统不在乎返回栈中是否存在这个活动,每次启动活动都会创建一个该活动的实例。
2) singleTop
在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例
3) singleTask
每次启动活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并且把在这个活动之上所用活动统统出栈,如果没有发现就会创建一个新的活动实例
4) singleInstance
在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用同一个返回栈,也就解决了共享活动实例的问题
3. 启动活动的最佳写法
在实际项目开发中经常会有对接的问题出现,如:SecondActivity不是由你开发的,但现在你负责的部分需要启动SecondActivity这个功能,而你却不清楚启动这个活动需要传递那些数据
最佳解决方案:
在SecondActivity中写一个静态的方法actionStart()
public static void actionStart(Contextcontext, String data1, String data2){
Intent intent = new Intent(context,SecondActivity.class);
intent.putExtra(“param1”, data1);
intent.putExtar(“param2”,data2);
context.startActivity(intent);
}
好处:
1) 最重要的一点是一目了然,SecondActivity所需要的数据全部都在方法参数中体现出来了
2) 简化了启动活动的代码,只需要一行代码就可以启动SecondActivity:
SecondActivity.actionStart(FirstActivity.this,“data1”, “data2”);