我已经在我的应用程序中自定义了Application类来初始化一些全局对象。
但我注意到这个Application类不仅在普通的app start中运行,而且在其他场合(比如单元测试)中也运行。这是不可取的,因为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);
        //...
    }
}

最佳答案

你应该试试谷歌最近发布的“构建变体”。
你可以这样定义一种新的产品口味(谷歌的例子):

    ...
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/下面的源目录。你可以给每种口味添加资源、类、值等。为了解决您的特定问题,您应该在每个flavours源目录中放置一个Application类,并将它们彼此分开开发。
Documentation on developer.android.com

10-07 22:54