1

我们的应用程序使用 AlarmManager 以特定的 PendingIntent 唤醒应用程序,这个意图总是正确地传递给我们的 onReceive 方法。在以下代码中,alarmid 和 alarmuser 具有正确的信息:

@Override
public void onReceive(Context ctx, Intent intent) {
    Intent i = new Intent(context, MainActivity.class);
    i.putExtra("alarmid", intent.getIntExtra("id", -1));
    i.putExtra("alarmuser", intent.getStringExtra("user"));
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    context.startActivity(i);
}

但是当使用这个意图调用 startActivity 时,只有在调用 onCreate 方法时才会提供额外的数据。所以这段代码工作正常并且变量被设置:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
        String alarmId = getIntent().getExtras().getString("alarmid");
        String alarmUser = getIntent().getExtras().getString("alarmuser");
    }
}

但是,如果使用 onRestart,我们会得到一个空意图(没有额外内容)。即此代码不起作用,并且永远不会设置变量:

@Override
public void onRestart() {
    super.onRestart();

    if(getIntent().hasExtra("alarmid") && getIntent().hasExtra("alarmuser")) {
        String alarmId = getIntent().getExtras().getString("alarmid");
        String alarmUser = getIntent().getExtras().getString("alarmuser");
    }
}

因此,onStart(显然在 onCreate 和 onRestart 之后调用)有时在意图中有我们的附加功能,有时则没有。

我们做错了什么还是预期的?

4

0 回答 0