- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我划分了 MainActivity 的职责,并尝试通过扩展 BaseActivities 来保持它的清洁和可读性,例如 MainActivity extends AdBaseActivity extends LocationBaseActivity extends FullScreenActivity extends Activity。
每个 Activity 仅负责它们被命名为执行的操作,同时保持 MainActivity 设置布局和 View 并运行任务的主要对象,例如 GameSurfaceView 或它应该运行的主类。这种糟糕的编程实践是否涉及耦合和内聚、难以测试或来自任何其他设计原则方面?
是否使用一个类,例如 LocationController 以及所有需要和实例化的生命周期方法,或者与依赖注入(inject)一起使用,比扩展 BaseActivities 更好?
我想知道如何在需要权限时使用 Activity 所需的回调来维护管理器类,例如应该填充 DialogFragment 或任何其他 View ,或者返回另一个 Activity 的结果?这些管理器类可以是其他类的成员,对 Activity 有更深的引用可能会导致内存泄漏,如果这种情况只能 当管理器类处于阻止 Activity 引用不被释放的特定状态时发生。
最佳答案
TLDR;
是也不是!
继承和所有 OOP
原则对于可读性和代码管理非常有效,但由于您正在开发移动应用程序,太多的类可能会降低内存和性能。
我明白你想做什么以及为什么。不久前,我在编写一个相当大的 Android
应用程序时遇到了同样的问题。
因为它基本上是一个包含 4 个 Fragments
的单个 Activity
应用程序,所以我最终在我的 MainActivity
中包含了太多代码,即使是委托(delegate)一些代码到我的 Fragments
。
然后我更改了我的 MainActivity 并通过组合使其拥有以下 Manager
类:
位置管理器
ApiVendorManager
UIManager
BackgroundJobManager
AppFunctionalityManager
StageTransitionManager
每个包含 800+ 行代码和生命周期回调(onCreate()
、onPause()
、...)。
在那之后,我的 MainActivity
非常干净且井井有条,我为自己感到自豪,但我注意到性能急剧下降。
然后我偶然发现了这个 documentation page上面写着:
However, abstractions come at a significant cost: generally they require a fair amount more code that needs to be executed, requiring more time and more RAM for that code to be mapped into memory.
我最后所做的是通过仅维护 4 个 Manager
来在抽象 和性能 之间找到一些平衡。
我会说:继续抽象,直到您注意到性能问题。那时您应该考虑限制继承和组合,甚至可能重新合并一些以前扩展的类。
同样的原则也适用于扩展您的 Activity
类。
关于java - 通过扩展 BaseActivites 来划分职责是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827960/
我在理解指针时遇到一些问题 我有矩阵,然后我使用它将其分成小块 tiles_num = n /tile; // Allocate blocked matrix Ah = (REAL **) mall
我有一个制表符分隔的文件,看起来像这样: foo 0 4 boo 3 2 blah 4 0 flah 1 1 我正在尝试计算每行两列之间的 log2。我的问题是除以零 我试过的是这样的: cat fi
在返回最终结果之前,我使用 BigDecimal 进行了几次计算。我的计算包含两个部分。我知道我应该在调用 divide() 时定义缩放和舍入模式。但是,由于我使用的是货币,所以我想尽可能长时间地保持
我正在尝试将两个数字 50 和 5 相除。这是我的代码: function Divide(Num1, Num2: Integer): Integer; asm MOV EAX, Num1
我对 R 和映射非常陌生,我想创建某些数据的映射。我有一组名为“D.Montreal”的数据,它显示了 2010 年访问蒙特利尔的加拿大人口普查部门的访客。我想使用这些数据创建一张 map ,以显示有
我需要制作一个条形图,将数据分为多个 bin。 我的数据如下所示: 1.0 5 1.2 4 2.4 1 4.3 6 5.2 10 然后在X轴上我想有时间的值,比如:[1-4)、[4-5)等(取决于cs
我正在尝试使用一个后台 worker ,它为字典中的每个键将内容保存到文件中。 ACon 是一个个人类,它在其中调用字典内容的保存函数。 private void bwSaver_DoWork(
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想将一些矩阵加载到我的程序中,然后我想将它分成更小的 block 。我想要的确切内容可以在下面的图片中看到: http://postimg.org/image/aki19hjx9/ba463111/
我有一个 anchor ,我将其注入(inject)到 jqGrid 格式化程序中的 HTML 中,如下所示: var number = rowObject.number; var plateNumb
我在传单标记上使用弹出窗口,并使用背景作为固定大小的图像。每当标记放置在 map 的一 Angular ,然后我单击标记以显示弹出窗口时,它会稍微移动整个 map 几分之一秒,然后弹出消息会超出 ma
我有一些代码,例如: good = [x for x in mylist if x in goodvals] bad = [x for x in mylist if x not in goodvals
我想将我的窗口 (wpf) 分成三列:左列必须是 DockPanel(我认为 StackPanel 在 Canvas), 右栏应该是另一个 DockPanel 包含一个 listbox 并且在中间我需
我有按国家/地区划分城市列表的代码: query('SELECT `city`, `country` FROM `cities` ORDER BY `id` ASC'); $cities->execu
我已经划分了我的Bootstrap网格列如下。 A B1 B1.1
我正在开发一个 asp.net 项目,但我还没有很长的 web.config 文件(超过 400 行)。但是有了这个 nhibernate log4net 和 urlrewrites。它越来越大。有没
我正在尝试使用 NSArrayController 和 cocoa 绑定(bind)创建分段的 NSTableView。我正在寻找类似的方法,例如 iOS 中的 NSFetchedResultsCon
早上好,下午好,还是晚上好, 在查看关闭“抑制 JIT 优化 (...)”选项的调试构建的汇编代码后,我注意到以下奇怪的行为(bitCount 是 ulong): int BitQ
我正在尝试根据 Firebase 数据库中的键对 Tableview 数据进行分段。 我能够根据键 (itemPreset) 正确划分所有内容。 我在将可重用单元分配到其部分时遇到问题。 单元格不断重
我最近升级到 Lodash 3.10.1我注意到了一些奇怪的事情。 假设我有一个数字数组,我想得到数组中的最大值然后减半: var series = [ 6, 8, 2 ]; var highestT
我是一名优秀的程序员,十分优秀!