繁体   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