设置Bundle和addExtras Vs直接传递字符串



有什么区别?我正在从教程中学习如何将字符串从一个活动传递到另一个活动,这个人使用以下代码从数据的EditText中获取信息,并将其传递到OpenedClass的TextView:

public class Data {
    EditText sendET;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.get);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case R.id.bSA:
            String bread=sendET.getText().toString();
            Bundle basket=new Bundle();
            basket.putString("key", bread);
            Intent a= new Intent(Data.this, OpenedClass.class);
            a.putExtras(basket);
            startActivity(a);
            break;
        }
    }

//这边是另一班

public class OpenedClass{

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onPostCreate(savedInstanceState);
        setContentView(R.layout.send);
        Bundle gotBasket=getIntent().getExtras();
        gotBread=gotBasket.getString("key");
        question.setText(gotBread);
    }
}

我不能用替换OpenedClass中的最后3行吗

question.setText(Data.sendET.getText().toString());

避免在Data类中创建Bundle、添加Extras等。区别是什么?为什么我应该选择更复杂的,因为从视觉上看,它会带来相同的结果。

Data中的EditText(我认为它扩展了Activity)将引用该Activity的上下文。如果您将sendET设置为static,那么您将静态引用该活动的上下文。当该Data活动完成时,您将通过静态sendET EditText 泄漏其上下文

如果您的活动失去焦点(可能有电话打来),则无法保证您的活动在恢复时仍在内存中。

如果系统出于任何原因杀死了它,那么活动中的所有内容都将丢失。但是,额外费用将作为"活动"的一部分予以保留。然后你可以重新创建你的状态。

为了更容易处理我的Extras\Activities,我通常会向它们添加一个静态方法来处理捆绑包的创建和启动。

启动"活动"就像调用此方法一样简单。

例如

public static void Launch(Activity oldActivity, int parameter) {
    Intent i = new Intent(oldActivity, ThisActivity.class);
    i.putExtra("PARAM", parameter);
    oldActivity.startActivity(i);
}

最新更新