如何有条件地自定义Application类?

时间:2016-01-08 20:58:36

标签: java android

我在我的应用中定制了Application类来初始化一些全局对象。

但我注意到这个Application课程不仅在正常的应用开始时运行,而且在其他场合如单元测试中运行。这是不可取的,因为Application类中的初始化可能会对测试结果产生副作用。

那么Application类中是否有任何方法可以确定应用程序是否正在运行以供用户正常使用,还是出于其他目的?

我想实现这样的目标:

public class MyApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        if (isNormalRun())    //<-- How to implement this?
            initGlobalObjects();
    }

    private void initGlobalObjects()
    {
        SomeClass.initializeInstance(this);
        OtherClass.initializeInstance(this);
        //...
    }
}

3 个答案:

答案 0 :(得分:3)

您应该尝试最近由Google发布的“Build Variants”。 您可以定义这样的新产品风格(例如Google):

    ...
android {
    ...
    defaultConfig { ... }
    signingConfigs { ... }
    buildTypes { ... }
    productFlavors {
        demo {
            applicationId "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }
}
...

然后将源目录添加到项目中。每个产品风味对应于/src/下面的源目录。您可以为每种风格添加资源,类,值等。要解决您的特定问题,您应该在每个flavor源目录中放置一个Application类,并将它们彼此分开开发。

Documentation on developer.android.com

答案 1 :(得分:1)

您认为“正常运行”是什么?

您可以在Application类中定义一个方法,您将从onCreate()的{​​{1}}调用该方法。例如:

MainActivity

答案 2 :(得分:0)

您可以使用属性文件,例如在测试环境中参数化文件进行测试,在生产环境中使用参数为该情况参数化文件。