簡體   English   中英

帶有 TaskStackBuilder 意外行為的 Android 通知

[英]Android notification with TaskStackBuilder unexpected behavior

我正在使用 Android TaskStackBuilder 在單擊通知時使用預定義的堆棧創建通知。

在應用程序中,我有 2 個活動:

  1. MainActivity 啟動器
  2. 活動B

在主要活動中,我使用 TaskStackBuilder 和以下堆棧顯示通知:[MainActivity(launcher intent), ActivityB]

當通知顯示時,我拉下狀態欄並單擊通知,然后按預期看到 ActivityB,當單擊后退按鈕時,我也按預期看到 MainActivity,但它的 onCreate 被調用? 對此有解釋嗎? 這實際上意味着 MainActivity 已經完全重啟了! 為什么?

MainActivity 啟動模式:“singleTop”

此外,似乎一旦單擊通知就會創建一個新的 MainActivity,而不是恢復已經打開的原始 MainActivity。 (hash不一樣,調用了原來的MainActivity onDestroy!)

通知掛起的意圖是這樣創建的:

private fun createPendingIntent() : PendingIntent {
    val stackBuilder = TaskStackBuilder.create(applicationContext)
    stackBuilder.addNextIntentWithParentStack(applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName))
    stackBuilder.addNextIntent(Intent(applicationContext, ActivityB::class.java))
    return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
}

通知顯示如下:

 private fun showNotification() {
    val pIntent = createPendingIntent()
    val builder = NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle("Have a nice day")
        .setContentText("Take care")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pIntent)

    val notification = builder.build()
    with(NotificationManagerCompat.from(this)){
        notify(100, notification)
    }
}

我想我找到了更好的方法。 我使用的是 PendingIntent,而不是使用 TaskStackBuilder。 getActivities允許提供一系列 Intent,這效果更好,並且 MainActivity 在從頂級活動返回時沒有重新啟動。

這里我用它

private fun createPendingIntent(): PendingIntent {
    val rootIntent  = applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName)
    val nextIntent = Intent(applicationContext, ActivityB::class.java)
    
    return PendingIntent.getActivities(applicationContext, 0, arrayOf(rootIntent, nextIntent), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM