android - TaskStackBuilder.addParentStack() 和 TaskStackBuilder.addNextIntent() 有什么不同?

标签 android notifications back-stack android-8.0-oreo

我尝试按照 android 教程测试 Android O 中的通知 channel 。当我进入显示通知的步骤时,我看到他们使用 TaskStackBuilder,我想知道 addParentStack() 在做什么? 因为当我删除这行代码时它仍然可以正常工作。

我尝试通过添加更多父项来测试它,如下所示:

private PendingIntent getPendingIntent() {
    Intent openMainIntent = new Intent(this, MainActivity.class);
    Intent openMain2Intent = new Intent(this, Main2Activity.class);
    Intent openMain3Intent = new Intent(this, Main3Activity.class);

    // The stack builder object will contain an artificial back stack for the
    // started Activity.
    // This ensures that navigating backward from the Activity leads out of
    // your application to the Home screen.
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    // Adds the back stack for the Intent (but not the Intent itself)
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addParentStack(Main2Activity.class);

    // Adds the Intent that starts the Activity to the top of the stack
    stackBuilder.addNextIntent(openMain3Intent);
    return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
}

如上面的代码,我添加了多个父级,并期望当我从 Main3Activity 按回时,它应该转到 Main2ActivityMainActivity分别,但结果是它立即返回主屏幕。

我通过删除 addParentStack() 进行了更改,并添加了更多 addNextIntent(),如下所示:

private PendingIntent getPendingIntent() {
    Intent openMainIntent = new Intent(this, MainActivity.class);
    Intent openMain2Intent = new Intent(this, Main2Activity.class);
    Intent openMain3Intent = new Intent(this, Main3Activity.class);

    // The stack builder object will contain an artificial back stack for the
    // started Activity.
    // This ensures that navigating backward from the Activity leads out of
    // your application to the Home screen.
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

    // Adds the Intent that starts the Activity to the top of the stack
    stackBuilder.addNextIntent(openMainIntent);
    stackBuilder.addNextIntent(openMain2Intent);
    stackBuilder.addNextIntent(openMain3Intent);
    return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
}

一切都按我的预期工作正常,当我按下后退按钮时,它打开了 Main3Activity 并转到 Main2ActivityMainActivity

我发现有人说我使用addParentStack()时需要在AndroidManifest.xml中添加android:parentActivityName,我做了,但结果是一样的,什么也没发生。

所以,如果有人能告诉我:

  • addParentStack() 的作用是什么?
  • addParentStack()addNextIntent() 有什么不同?
  • 我们需要使用addParentStack()吗?

提前致谢。

最佳答案

所以,我在官方文档中找到了这个

1.addParentStack()

它添加了后退堆栈(意味着如果您按下后退按钮,它将带您进入您将为此方法提供的 Activity )

2.addParentStack()和addNextIntent()的区别

基本区别是 addnextIntent() 会将 Intent 添加到堆栈顶部

3.我们需要addParentStack()吗?

如果您不想在按后退按钮后转到父 Activity 或您已在 list 文件中声明,则不需要

下面的代码来自官方文档,有助于你理解

int id = 1;
...
Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent to the top of the stack
stackBuilder.addNextIntent(resultIntent);
 // Gets a PendingIntent containing the entire back stack
 PendingIntent resultPendingIntent =
    stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
 ...
 NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
 builder.setContentIntent(resultPendingIntent);
 NotificationManager mNotificationManager =
 (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 mNotificationManager.notify(id, builder.build());

关于android - TaskStackBuilder.addParentStack() 和 TaskStackBuilder.addNextIntent() 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46466870/

相关文章:

android - 如何以编程方式开始电话 session

java - APK 文件的元数据?

grails - 如何在grails中使用事件推送插件

Android:AlarmManager 一直显示相同的通知

react-native - PushNotificationIOS 在模拟器上工作吗?

android - 返回到 Android 中返回堆栈中的不同 Activity

android - getUserMedia Android Webview Ionic

java - Start called in state 4 error in android MediaPlayer?

android - 关于android View 寻呼机中嵌套 fragment 中的回栈的问题

android - backstack事务后如何持久化 fragment 数据?