在 Android(针对 API 14-16)中,我有一个 MainActivity 和一个 NextActivity 。如果在 NextActivityMainActivity 块内调用 getIntent() 方法,则使用 Intent 从 onCreate() 中启动 NextActivity 没有困难:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int data = 7;
        ...
        Intent intent = new Intent(this, NextActivity.class);
        intent.putExtra("data", data);
        startActivity(intent);
        }
    }

public class NextActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final int data = this.getIntent().getIntExtra("data", 7);
        ...
        }
    ...
    }

但是,由于 data 字段在 NextActivity 的匿名(“内部”)类中使用,我不得不将其声明为 final

我不想声明字段 final ,如果我在类(class)开始时,在 onCreate() 开始之前声明它们,我通常可以避免这样做。但出于某种原因,如果 NextActivity 语句出现在 getIntent() 之外(没有 final 关键字),则应用程序会在 onCreate() 启动时崩溃。

知道为什么吗?

最佳答案

您不能在 getIntent() 之前使用 onCreate() —— 那时根本没有 Intent 可用。我相信任何需要 Context 的东西也是如此。

但是,您的匿名内部类仍然可以调用 getIntent() ,因此您根本不需要将其声明为变量。

10-05 21:37