我们正在为Android开发一套相当复杂的软件。 为了简化事情(如常见任务(,我正在将我们的软件所做的一些事情(如数据库访问(移动到应用程序中,以便各种活动可以在必要时访问它们。
在活动中,我可以使用getApplication()
to
访问应用程序的数据成员,但我无法弄清楚如何从应用程序执行相反的操作。 有没有一种简单的方法可以从Android应用程序获得对其依赖活动的"可见性"?
Application
类(通常(不应关注任何Activity
或其他组件。
只需创建一个数据库帮助程序(例如扩展SQLiteOpenHelper
(,并让您的Application
创建并保存对它的静态引用。
public class MyDBHelper extends SQLiteOpenHelper {
...
}
对于Application
...
public class MyApp extends Application {
protected static MyDBHelper dbHelper = null;
@Override
public void onCreate() {
dbHelper = new MyDbHelper();
...
}
}
然后在任何应用程序组件中...
MyApp.dbHelper.someMethod();
我们所做的是创建一个BaseActivity
类。我们所有的活动都继承自BaseActivity
类。我们已经覆盖了BaseActivity
中的大多数生命周期方法,以便我们可以自己跟踪活动堆栈。通过这种方式,您可以确定哪个活动是"当前"活动。若要从活动中获取信息,可以在BaseActivity
中提供在继承的活动中重写的访问方法。
我相信还有其他方法。
这种架构的最大问题是没有真正可靠的方法来确定哪个活动是当前正在运行的活动(即:活动堆栈顶部的活动(。有一些黑客方法依赖于拥有访问所有任务的权限,但这确实不好。
Android 需要为应用程序提供一种方法来确定堆栈中的活动以及顺序,但它没有。
当您这样做时,请注意Android可以(并且将(随时杀死您的进程(如果它在后台(,并且当用户返回到应用程序时,它将重新创建进程(和您的应用程序实例(,然后它将仅重新创建任务堆栈之上的活动。它不会重新创建顶部活动下的所有活动,除非(直到(用户返回到它们。