最适合 practices/strategies 具有活动的图书馆项目,路由回宿主活动?
Best practices/strategies for a library project with activities, routing back to host activities?
我正在从事一个包含一些活动的图书馆项目。这些活动需要根据输入重定向回主机应用程序中的活动。
例如:
[host activity#1] -> [library activity] -> [host activity#1]
-> [host activity#2]
-> [host activity#3]
我面临的问题是为主机应用程序提供一个简单的 api 来定义在每个场景中路由到哪个 activity。我考虑过让他们在onActivtyResult中处理它,但是库中的某些场景可能是这样的:
[host activity#1] -> [lib activity#1] -> [lib activity#2] -> [host activity#1]
-> [host activity#2]
是否 normal/correct 在我的库中创建一个静态 class 主机应用程序可以在其中定义哪些活动意味着处理每个场景?
让他们在一些静态 class 中扩展一个接口是否合适,该接口定义了在每个场景中要做什么(接口强制他们定义在每个可能的情况下会发生什么)?
我不太确定如何表达这个问题,我的假设是这个问题有更好的术语可以帮助我通过搜索找到我正在寻找的东西。
The issue I'm facing is providing a simple api for host applications to define which activity to route to in each scenario. I considered just allowing them to handle it in onActivtyResult, but some scenarios in the library may look like this...
我没有发现 onActivityResult
方法有任何问题,您可以简单地将这些调用链接起来,并且仍然 return 进入 [host activity#1]
,后者将决定下一步导航到哪里。
如果你害怕写太多代码(我认为你不应该),你可以考虑这个解决方法:创建一个基础 activity class 覆盖 onActivityResult()
.它将所有导航逻辑集中在一个地方,因此所有其他活动将通过扩展基础 activity 自动获取它。是的,你将不得不像这样写一些丑陋的代码:
if (this instanceof Activity1) {
...
} else if (this instanceof Activity2) {
...
}
确实,它看起来确实有点难看,但它也解决了让代码分布在多个活动中的问题。从可维护性的角度来看,将这段代码包含在一个方法中对我来说完全没问题。
Is it normal/correct to create a static class in my library where the host application can define which activities are mean to handle each scenario?
不,我觉得这样不行。图书馆不应该知道任何关于主机应用程序的事情,这只是一个糟糕的设计。它还会要求宿主应用程序在使用之前将活动设置到库中,这将导致库使用起来不太方便。
Would it be appropriate to have them extend an interface in some static class that defines what to do in each scenario (the interface forcing them to define what happens in each possible case)?
是的,这非常好,我认为这实际上是最好的方法。在这种情况下,库仅通过其自己的界面工作,它对主机应用程序一无所知。虽然接口不必在 class 中定义,但我更愿意在单独的文件中定义它。这样客户就不一定需要看到封闭的 class.
希望对您有所帮助。如果我没有回答问题,请提供更多详细信息以及您到目前为止尝试过的内容。谢谢,祝您好运!
我正在从事一个包含一些活动的图书馆项目。这些活动需要根据输入重定向回主机应用程序中的活动。
例如:
[host activity#1] -> [library activity] -> [host activity#1]
-> [host activity#2]
-> [host activity#3]
我面临的问题是为主机应用程序提供一个简单的 api 来定义在每个场景中路由到哪个 activity。我考虑过让他们在onActivtyResult中处理它,但是库中的某些场景可能是这样的:
[host activity#1] -> [lib activity#1] -> [lib activity#2] -> [host activity#1]
-> [host activity#2]
是否 normal/correct 在我的库中创建一个静态 class 主机应用程序可以在其中定义哪些活动意味着处理每个场景?
让他们在一些静态 class 中扩展一个接口是否合适,该接口定义了在每个场景中要做什么(接口强制他们定义在每个可能的情况下会发生什么)?
我不太确定如何表达这个问题,我的假设是这个问题有更好的术语可以帮助我通过搜索找到我正在寻找的东西。
The issue I'm facing is providing a simple api for host applications to define which activity to route to in each scenario. I considered just allowing them to handle it in onActivtyResult, but some scenarios in the library may look like this...
我没有发现 onActivityResult
方法有任何问题,您可以简单地将这些调用链接起来,并且仍然 return 进入 [host activity#1]
,后者将决定下一步导航到哪里。
如果你害怕写太多代码(我认为你不应该),你可以考虑这个解决方法:创建一个基础 activity class 覆盖 onActivityResult()
.它将所有导航逻辑集中在一个地方,因此所有其他活动将通过扩展基础 activity 自动获取它。是的,你将不得不像这样写一些丑陋的代码:
if (this instanceof Activity1) {
...
} else if (this instanceof Activity2) {
...
}
确实,它看起来确实有点难看,但它也解决了让代码分布在多个活动中的问题。从可维护性的角度来看,将这段代码包含在一个方法中对我来说完全没问题。
Is it normal/correct to create a static class in my library where the host application can define which activities are mean to handle each scenario?
不,我觉得这样不行。图书馆不应该知道任何关于主机应用程序的事情,这只是一个糟糕的设计。它还会要求宿主应用程序在使用之前将活动设置到库中,这将导致库使用起来不太方便。
Would it be appropriate to have them extend an interface in some static class that defines what to do in each scenario (the interface forcing them to define what happens in each possible case)?
是的,这非常好,我认为这实际上是最好的方法。在这种情况下,库仅通过其自己的界面工作,它对主机应用程序一无所知。虽然接口不必在 class 中定义,但我更愿意在单独的文件中定义它。这样客户就不一定需要看到封闭的 class.
希望对您有所帮助。如果我没有回答问题,请提供更多详细信息以及您到目前为止尝试过的内容。谢谢,祝您好运!