跨Android应用程序和活动访问数据成员

时间:2012-05-16 17:53:21

标签: android-activity android

我们正在开发一套相当复杂的Android软件。为了简化事情(比如常见任务),我正在将我们的软件所做的一些事情(如数据库访问)移动到应用程序中,以便各种活动可以在必要时访问它们。

在一项活动中,我可以使用getApplication() to获取对应用程序数据成员的访问权限,但我无法弄清楚如何从应用程序执行相反操作。是否有一种简单的方法可以从Android应用程序获得“可见性”到其依赖的活动中?

2 个答案:

答案 0 :(得分:1)

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();

答案 1 :(得分:0)

我们所做的是创建一个BaseActivity类。我们的所有活动都继承自BaseActivity类。我们已经覆盖了BaseActivity中的大多数生命周期方法,以便我们可以自己跟踪活动堆栈。通过这种方式,您可以确定哪个活动是“当前”活动。要从活动中获取信息,您可以在BaseActivity中提供在继承的激活中覆盖的访问方法。

我确信还有其他方法。

这种架构的最大问题是没有真正可靠的方法来确定哪个活动是当前运行的活动(即:活动堆栈顶部的活动)。有一些hacky方法依赖于获得访问所有任务的权限,但这确实不好。

Android需要为应用程序提供一种方法来确定堆栈中的活动以及顺序,但不是。

执行此操作时,请注意Android可以(并且将会)终止(如果它在后台)并且当用户返回应用程序时它会重新创建进程(和您的Application实例),然后它将仅重新创建位于任务堆栈顶部的活动。它重新创建顶部下面的所有活动,除非(并且直到)用户返回它们。