我可以在 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>
我正在使用 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>