在同一范围内重用intent变量是危险的吗?

时间:2011-09-09 15:16:11

标签: android android-intent

我正在使用以下开关案例来处理不同的按钮,并在每种情况下启动一个活动。

我想知道 - 我应该将Intent对象(i)移到外面 - 可能作为私有类属性并重新使用它?或者,我应该将每个案例包装在括号中,以便我可以重新使用名称“i”而不添加唯一名称吗?哪个更安全/更好?重新使用同一个对象有风险吗?

@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;
    }
}

2 个答案:

答案 0 :(得分:4)

我会这样做:

@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 :(得分:2)

您可以重复使用该变量。它将成为新对象的新参考。

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);