Android Intent putExtra vs静态调用?

时间:2016-01-25 07:11:00

标签: android android-intent

我正在使用Intent启动活动,如下所示:

来源:

public class ChallongeLogin extends Activity
{
    public static String API_KEY, SUBDOMAIN;

    public void onClick(View view)
    {
        API_KEY = api_key.getText().toString();
        SUBDOMAIN = subdomain.getText().toString();

        Intent intent = new Intent(this, ChallongeEvents.class);
        startActivity(intent);
    }
}

目标:

public class ChallongeEvents extends Activity implements View.OnClickListener 
{
    String API_KEY = ChallongeLogin.API_KEY;
    String SUBDOMAIN = ChallongeLogin.SUBDOMAIN;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_challonge_events);
    }
}

正如您所看到的,我所做的就是创建ChallongeEvents类时,我只需从ChallongeLogin获取静态值并将它们放入局部变量中。

现在查看Google的官方Android教程: http://developer.android.com/training/basics/firstapp/starting-activity.html

他们做的有点不同。它们不是使用从原始源调用的静态值,而是使用putExtra传递数据:

intent.putExtra(EXTRA_MESSAGE, message);

然后他们用:

检索它
String message = intent.getStringExtra(MyActivity.EXTRA_MESSAGE);

他们为什么要做这些额外的步骤?我这样做有什么不对吗?

1 个答案:

答案 0 :(得分:4)

我们将对象解析为intent的额外内容的原因是您为该特定结果的意图实例保留状态。

您正在为ChallengeLogin活动的每个实例设置您希望与之交互的对象的值。如果在开始上一次交互的意图时访问和/或修改此挑战活动,您将收到当前实例化的值,而不是在意图启动时需要转换的值。

这就是公正,以及为什么在开始活动时静态调用不是满足您需求的最佳方式。

此外,您也可以完成此操作:Using putExtra() and getExtra().