首先,根据活动的实施,您错过了一些关于活动的重要事情。
1. 只对 AsyncTask 使用静态内部类或独立类:请参阅后台任务、进度对话框、方向更改 - 是否有任何 100% 有效的解决方案?
重要的是:
步骤#2:让AsyncTask通过数据成员(通过构造函数和 setter 设置)保留活动。
步骤 #5:在 onCreate() 中,如果 getLastNonConfigurationInstance() 不为 null,请将其强制转换为 AsyncTask 类并调用 setter 以将新活动与任务关联。
您会注意到,您必须根据 Android 的生命周期方法注册和取消注册组件。这很重要要知道,始终遵循Android的生命周期!
记住这一点将始终引导您找到有关Android解耦方式的正确答案。
2. 在需要时使用数据保存类。
这里这并不真正属于活动:
// Stores the fetched dataMap
ArrayList<HashMap<String, String>> arrayList;
当您的活动记录被销毁时,例如在配置更改期间,您的所有数据都会消失,您需要再次加载所有内容。
访问和存储数据可以通过许多不同的方式完成:http://developer.android.com/guide/faq/framework.html#3
在您的情况下,这可能适用:
还可以考虑将数据存储在数据库中或通过其他方式存储,这样即使您的应用程序被破坏,您的数据也不会消失。
3.与您的活动的沟通可以像这样完成:http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
以相同的方式将其用于视图和视图侦听器。让一个组件管理你的视图(就像片段一样),将其注册到你的活动,使用它,在不需要的时候或生命周期需要它时取消注册它。
就像在1.中所说的那样,Android生命周期是一切的关键。
4.依赖注入是一个非常重要的主题,你可以使用它的框架(如Dagger 2或RoboGuice),也可以按照自己的方式去做。确保注入器知道依赖项(例如哪些按钮需要哪些 ClickListener 和信息,或者您的适配器需要哪些数据)并将它们绑定在一起。在始终考虑生命周期时,您将看到需要哪些接口和哪些方法以及何时调用它们。
5.不要担心代码行的数量。如果您的设计是一致的并且有意义,那么即使有500行,您也不会遇到可读性问题。顺便说一句,当正确记录代码时,它很容易超过150行代码。所以,再次担心这一点。
如果您对实现细节有任何具体问题,请提出具体问题,否则您将获得臃肿的答案。