4

我不完全确定以下方法是好还是坏。如果有经验的人可以加他/她的 2 美分,那就太好了 :)

我有一个包含很多活动的应用程序。在这种情况下,它们都必须能够使用 LocalBroadcastManager 从动态注册的接收器(在 onCreate/Resume/Pause 中)接收消息,并运行 AsnycTask 来完成一些工作并显示 ProgressDialog。所需的代码(Receiver 和 AsnycTask)对于所有活动都是完全相同的。

消息可以随时由其中一项服务发送。

为此,我创建了一个实现所有这些的 Activity(在 oncreate/pause/resume 等中注册和取消注册接收器并包含此 AsyncTask)

所有其他活动都应该扩展此活动,因此我不必担心将额外代码放入它们各自的所有 onCreate/onResume/onPause 方法中以调用任何帮助程序类/方法(并且忘记这样做)。

这种方法可以吗?我之所以问是因为我曾经偶然发现一个关于从自定义类扩展活动的类似问题(遗憾的是我再也找不到它了)并且一个答案表明它会导致大量内存泄漏而没有解释原因。

非常感谢你!

4

2 回答 2

2

我使用 BaseActivity 类取得了很大的成功,我的项目中的所有其他活动都从该类扩展而来。由于这个原因,我还没有遇到任何内存问题。

另一种方法是将您的通用功能放在接口中,然后让您的活动根据需要实现这些功能。这里对这两种方法的优点进行了很好的讨论:接口与基类

于 2013-05-21T15:37:40.160 回答
2

加上我的 2cents,我同意 MattDavis,我总是设置一个我觉得非常有用的“BaseActivity”。

覆盖 onCreate 没有任何问题,但是还有一些额外的选项。

  1. 在您的 BaseActivity 中,您可以在“onCreate stuff”之前和之后设置一个方法,但仍然在 onCreate 方法中。在我的,我使用“PreUILoad()”和“PostUILoad”。然后我可以覆盖这些方法以在我的默认 onCreate 之前或之后添加任何内容,而不会搞砸 onCreate。

  2. 一个更好的解决方案是实现这个库,它可以让事情变得简单 100 倍。我只是设置了我的“BaseForm”(表单扩展活动)来拥有我的项目,然后其他所有东西都扩展了 BaseForm。在所有其他表单中,我什至不需要触及 onCreate,只需设置所有内容的“Define”方法,而且我永远不必担心弄乱 onCreate。信息在这里:

https://code.google.com/p/alternate-java-bridge-library/

希望这会有所帮助。

于 2013-05-21T15:59:06.547 回答