Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在同一范围内重复使用意图变量是否危险?_Android_Android Intent - Fatal编程技术网

Android 在同一范围内重复使用意图变量是否危险?

Android 在同一范围内重复使用意图变量是否危险?,android,android-intent,Android,Android Intent,我正在使用下面的开关盒来处理不同的按钮,并在每种情况下启动一个活动 我想知道——我是否应该将我想要的Intent对象移到外部——作为私有类属性并重新使用它?或者,我是否应该将每个案例都用括号括起来,这样我就可以重复使用名称I,而不必在名称后面附加唯一的名称?哪个更安全/更好?重复使用同一对象是否存在风险 @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_numbers:

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

我想知道——我是否应该将我想要的Intent对象移到外部——作为私有类属性并重新使用它?或者,我是否应该将每个案例都用括号括起来,这样我就可以重复使用名称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;
    }
}

您可以重用该变量。它将是对新对象的新引用

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,我实际上将默认处理留给代码编写者,因为它实际上取决于希望实现的范围和逻辑。所以我就写了回信,;那里谢谢你的评论