关于Activity一些技巧
标签(空格分隔): Activity
1.活动被回收了怎么办?
活动中可以存在一些临时数据和状态,如果被回收了,可能之前的临时数据全没了。
Activity中提供了一个onSaveInstanceState()回调方法,这个方法保证一定会在活动被回收之前调用,因此,我们可以通过这个方法来解决活动回收时临时数据得不到保存的问题。
onSaveInstanceState()会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如putString()、putInt()等。
在MainActivity中添加如下代码就可以将临时数据进行保存:
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
String tempData="Something need to be stored";
outState.putString("data_key",tempData);
}
我们需要取出临时保存的全部数据,只需要在onCreate()中相应的方法取出数据即可。
修改MainActivity的onCreate()方法,如下所示:
@Overrid
protected void onCreate(Bundle savedInstanceState){
.....
.....
if(savedInstanceState!=null){
String tempData=savedInstanceState.getString("data_key");
Log.i("MainActivity",tempData);
}
}
2. 知晓当前是哪一个活动
新建一个BaseActivity继承自Activity,然后重写onCreate()方法如下所示:
public void BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.i("BaseActivity",getClass().getSimpleName());
}
}
3. 随时随地的退出程序
如果你想退出程序,有时候需要按多次Back键才行,按Home键只是把程序挂起,并没有退出。如果需要随时随地的退出程序应该怎么办呢,其实这个思路很简单,我们只需要用一个专门的集合类来对所有的活动进行管理就可以了。
新建一个ActivityCollector类作为活动管理器,代码如下:
/**
*活动管理器
*/
public class ActivityCollector {
public static List<Activity> activities=new ArrayList<Activity>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
public static void finishAll(){
for (Activity activity : activities) {
if (!activity.isFinishing) {
activity.fininsh();
}
}
}
}
接下来修改BaseActivity中的代码,如下所示:
public void BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.i("BaseActivity",getClass().getSimpleName());
//将正在创建的活动添加到活动管理器中
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy(){
super.onDestroy();
//将一个将要销毁的活动从活动管理器中移除
ActivityCollector.removeActivity(this);
}
}
如果需要在哪个地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了。
4. 启动活动的最佳写法
修改SecondActivity中代码,如下所示:
public class SecondActivity extends BaseActivity{
public static void actionStart(Context context,String data1,String data2){
Intent intent=new Intent(context,SecondActivity.class);
intent.putExtra("param1",data1);
intent.putExtra("param2",data2);
context.startActivity(intent);
}
}
这样简化了启动代码,只需要一行代码就可以启动SecondActivity,如下所示:
SecondActivity.actionStart(FirstActivity.this,"data1","data2");
养成良好的习惯,给每个活动都添加类似的启动方法。