我们正在为 Android 开发一套相当复杂的软件。为了简化事情(如常见任务),我正在将我们的软件所做的一些事情(如数据库访问)移动到应用程序中,以便各种活动可以在必要时访问它们。
在一个活动中,我可以使用getApplication()
to
获取对应用程序数据成员的访问权限,但我无法弄清楚如何从应用程序执行相反的操作。有没有一种简单的方法可以从 Android 应用程序中获得“可见性”到其依赖的活动中?
我们正在为 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
在继承的活动中提供覆盖的访问方法。
我相信还有其他方法。
这种架构最大的问题是没有真正可靠的方法来确定哪个活动是当前正在运行的活动(即:活动堆栈顶部的活动)。有一些 hacky 方法依赖于访问所有任务的权限,但这确实不好。
Android 需要为应用程序提供一种方法来确定堆栈中的哪些活动以及按什么顺序,但它没有。
当您执行此操作时,请注意 Android 可以(并且将)随时终止您的进程(如果它在后台),并且当用户返回应用程序时,它将重新创建进程(和您的应用程序实例)和然后它将仅重新创建位于任务堆栈顶部的活动。它不会重新创建顶部活动下方的所有活动,除非(并且直到)用户返回它们。