Android 在同一范围内重复使用意图变量是否危险?
我正在使用下面的开关盒来处理不同的按钮,并在每种情况下启动一个活动 我想知道——我是否应该将我想要的Intent对象移到外部——作为私有类属性并重新使用它?或者,我是否应该将每个案例都用括号括起来,这样我就可以重复使用名称I,而不必在名称后面附加唯一的名称?哪个更安全/更好?重复使用同一对象是否存在风险Android 在同一范围内重复使用意图变量是否危险?,android,android-intent,Android,Android Intent,我正在使用下面的开关盒来处理不同的按钮,并在每种情况下启动一个活动 我想知道——我是否应该将我想要的Intent对象移到外部——作为私有类属性并重新使用它?或者,我是否应该将每个案例都用括号括起来,这样我就可以重复使用名称I,而不必在名称后面附加唯一的名称?哪个更安全/更好?重复使用同一对象是否存在风险 @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_numbers:
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_numbers:
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_numbers);
startActivity(i);
break;
case R.id.button_colors:
Intent i2 = new Intent(v.getContext(), DrillActivity.class);
i2.putExtra("word_list", R.raw.wl_colors);
startActivity(i2);
break;
case R.id.button_daysmonths:
Intent i3 = new Intent(v.getContext(), DrillActivity.class);
i3.putExtra("word_list", R.raw.wl_daysmonths);
startActivity(i3);
break;
default:
break;
}
}
您可以重用该变量。它将是对新对象的新引用
case R.id.button_numbers:
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_numbers);
startActivity(i);
break;
case R.id.button_colors:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_colors);
startActivity(i);
break;
case R.id.button_daysmonths:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_daysmonths);
startActivity(i);
break;
default:
break;
一个提示,
由于所有情况都与您调用的相同活动相同,并且您所做的只是为额外的设置不同的值,因此我建议您执行以下操作:
int wordListValue;
switch ...
case R.id.button_numbers:
wordListValue = R.raw.wl_numbers;
break;
case R.id.button_colors:
wordListValue = R.raw.wl_colors;
break;
case R.id.button_daysmonths:
wordListValue = R.raw.wl_daysmonths;
break;
default:
return;
}
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", wordListValue);
startActivity(i);
您可以重用该变量。它将是对新对象的新引用
case R.id.button_numbers:
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_numbers);
startActivity(i);
break;
case R.id.button_colors:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_colors);
startActivity(i);
break;
case R.id.button_daysmonths:
i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", R.raw.wl_daysmonths);
startActivity(i);
break;
default:
break;
一个提示,
由于所有情况都与您调用的相同活动相同,并且您所做的只是为额外的设置不同的值,因此我建议您执行以下操作:
int wordListValue;
switch ...
case R.id.button_numbers:
wordListValue = R.raw.wl_numbers;
break;
case R.id.button_colors:
wordListValue = R.raw.wl_colors;
break;
case R.id.button_daysmonths:
wordListValue = R.raw.wl_daysmonths;
break;
default:
return;
}
Intent i = new Intent(v.getContext(), DrillActivity.class);
i.putExtra("word_list", wordListValue);
startActivity(i);
我会这样做:
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), DrillActivity.class);
switch (v.getId()){
case R.id.button_numbers:
i.putExtra("word_list", R.raw.wl_numbers);
break;
case R.id.button_colors:
i.putExtra("word_list", R.raw.wl_colors);
break;
case R.id.button_daysmonths:
i.putExtra("word_list", R.raw.wl_daysmonths);
break;
default: return;
}
startActivity(i);
}
我认为这更清楚。我会这样做:
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(), DrillActivity.class);
switch (v.getId()){
case R.id.button_numbers:
i.putExtra("word_list", R.raw.wl_numbers);
break;
case R.id.button_colors:
i.putExtra("word_list", R.raw.wl_colors);
break;
case R.id.button_daysmonths:
i.putExtra("word_list", R.raw.wl_daysmonths);
break;
default: return;
}
startActivity(i);
}
我认为这更清楚。+1表示第二个代码。它干净多了&我也会这样做。但是,您的第一个将不起作用。我还没有试过,但我想你需要声明我的意图;在switch语句之前。否则,如果第二个大小写为true,则它甚至不可见。此外,如果命中默认大小写且wordListValue为零,则第二个代码可能会出错,可能希望将最后3行换行为if wordListValue!=因此,您不会得到一些奇怪的错误。HןJPM,我实际上将默认处理留给代码编写者,因为它实际上取决于希望实现的范围和逻辑。所以我就写了回信,;那里感谢您对第二个代码的注释+1。它干净多了&我也会这样做。但是,您的第一个将不起作用。我还没有试过,但我想你需要声明我的意图;在switch语句之前。否则,如果第二个大小写为true,则它甚至不可见。此外,如果命中默认大小写且wordListValue为零,则第二个代码可能会出错,可能希望将最后3行换行为if wordListValue!=因此,您不会得到一些奇怪的错误。HןJPM,我实际上将默认处理留给代码编写者,因为它实际上取决于希望实现的范围和逻辑。所以我就写了回信,;那里谢谢你的评论