簡體   English   中英

從通知意圖啟動活動時重新創建 Android ViewModel

[英]Android ViewModel recreated when launching activity from notification intent

我正在嘗試創建一個計時器應用程序。 當用戶按下計時器時,它將創建一個計時器正在運行的通知。

我正在使用視圖 model 來存儲我的視圖數據。 我想要的是當計時器啟動並創建通知時,當用戶按下通知時,它會再次啟動計時器的活動並將其帶到堆棧的頂部。 活動的視圖應保留與以前相同的視圖 model 數據。

當前發生的是單擊通知會在我的后台堆棧中創建一個新活動。 這將為此活動創建一個新視圖 model。 當我按下后退按鈕時,我可以返回到舊的活動視圖。

我只需要將這個舊的活動視圖帶回堆棧,而不是創建新的活動。

我在視圖 model 中的代碼在計時器啟動時發送通知是這樣的:

    private fun sendNotification() {

    val intent = Intent(context, MainActivity::class.java)

    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)

    var builder = NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_launcher_foreground)
        .setContentTitle("Pomodoro Timer")
        .setContentText("Pomodoro Timer is running")
        .setContentIntent(pendingIntent)
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)

    with(NotificationManagerCompat.from(context)) {
        // notificationId is a unique int for each notification that you must define
        notify(1, builder.build())
    }
}

我的活動 onCreate 中的 model 視圖是這樣創建的:

    val dataBinding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    val timerFactory = TimerFactory(this)
    val timer = ViewModelProvider(this, timerFactory).get(Timer::class.java)

    dataBinding.timer = timer
    dataBinding.lifecycleOwner = this

如何使我的通知意圖保留並僅將舊活動和查看 model 回到堆棧頂部?

通知中的待處理意圖正在啟動一個新任務,因此會創建一個新的 MainActivity 實例。

如果你想回到原來的 MainActivity,在 Manifest 中聲明 MainActivity 為android:launchMode="singleTask"

另請查看有關 Android 啟動模式的文檔

暫無
暫無

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

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