代码之家  ›  专栏  ›  技术社区  ›  157 239n

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

  •  0
  • 157 239n  · 技术社区  · 7 年前

    我正在使用Android Studio,我想知道应用程序的目录(指每个非静态类)。

    问题是,我正在创建一个名为常量的类来总结我的应用程序中的任意常量。除与应用程序目录相关的常数外,我的所有常数当前都是静态的和公共的。我还实现了Serializable,将常量文件存储在某个文件中。我将通过constants类中的静态方法导出和导入常量。完全静止(真的:))

    我知道Context类中的getFilesDir()不是静态的,这意味着我不能调用MainActivity之类的东西。getFilesDir()。getAbsolutePath(),其中MainActivity扩展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();
        }
    }
    

    然而,实例化起来很麻烦 Constants constants = new Constants(this) 在MainActivity中,它还缺乏模块化,其他类在没有实例化对象的情况下无法使用该类。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   greywolf82    7 年前

    简短回答:不,不能。其他解决方法是使用Application类。示例:

    class MyApp extends Application {
        public final Constants constants;
    
        public void onCreate() {
            constants = new Constants(this);
        }
    }
    

    以及您的舱单:

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