我可以在 UI 线程之外使用 getFilesDir 吗

Can i use getFilesDir outside of the UI thread

我正在使用 Android Studio,我想知道应用程序在任何地方的目录(意味着每个非静态 classes)。

事实是,我正在创建一个名为 Constants 的 class 来总结我的应用程序中的任意常量。我的所有常量目前都是静态的 public 除了与应用程序目录相关的常量。我还实现了 Serializable 以将常量文件存储在某个文件中。我将通过 Constants class 内部的静态方法导出和导入常量。真的全部静态:))

我知道上下文 class 中的 getFilesDir() 不是静态的,这意味着我不能在 MainActivity extends 中调用类似 MainActivity.getFilesDir().getAbsolutePath() 的东西Activity 扩展上下文。

我也做不到这样的事情:

public transient static MainActivity someActivity = new MainActivity();
public transient static String parentAbsolutePath = someActivity.getFilesDir().getAbsolutePath();

因为它将在现有 UI 线程之外创建一个新的 UI 线程。

我知道有一种简单的方法可以做到这一点,那就是将 MainActivity 传递给构造函数,如下所示:

class Constants implements Serializable {
    public transient static MainActivity mainActivity;
    public transient static String parentAbsolutePath;

    Constants(MainActivity mainActivity){
        this.mainActivity = mainActivity;
        this.parentAbsolutePath = mainActivity.getFilesDir().getAbsolutePath();
    }
}

但是,在 MainActivity 中实例化 Constants constants = new Constants(this) 很麻烦,而且它缺乏模块化,其他 classes 不能在不实例化对象的情况下使用 class .

所以我的问题是,有没有一种方法可以访问 class 常量中的应用程序目录,而无需传入上下文扩展对象?

简短回答:不,你不能。替代解决方法是使用应用程序 class。示例:

class MyApp extends Application {
    public final Constants constants;

    public void onCreate() {
        constants = new Constants(this);
    }
}

和您的清单:

<application
android:name="MyApp">
<activity></activity>
</application>