关于设计模式
我们都知道在activity体系中是有多种启动模式的:standard、singleTop、singleInstance、singleTask四种。但是在compose中因为是单activity所以自然是没有启动模式的说法的,因此本文我使用一些NavHostController的一些api来实现启动模式中的效果。
standard
默认的效果就是standard的效果
singleTop
compose中我们可以通过判断顶部的页面是否是我们要启动的singleTop页面来处理。
如果顶部页面是singleTop的页面则直接刷新顶部页面。
判断代码:
/** * 判断顶部页面是否刚好是我们要路由的页面 */ fun sameAsTopPage(controller: NavHostController,dstRoute: String):Boolean{ val distination = controller.currentDestination?.route ?: "" return distination == dstRoute } 复制代码
singleTask
我们的实现方式,会先判断当前的路由栈中是否存在目标页面,如果存在会直接回退到目标页面,中间页面会自动被销毁
fun toSingleInstance(controller: NavHostController, route: String){ val findRoute = controller.findDestination(route) if (findRoute == null){ controller.navigate(route) }else{ controller.popBackStack() controller.navigate(route) } } 复制代码
singleSinstance
目前我们没有太好的办法实现单例模式,所以这里没有实现。
不过compose中单例的场景也似乎的确也不存在,所以也就没关系了。