我可以在 UI 线程之外使用 getFilesDir
Posted
技术标签:
【中文标题】我可以在 UI 线程之外使用 getFilesDir【英文标题】:Can i use getFilesDir outside of the UI thread 【发布时间】:2018-09-17 19:39:27 【问题描述】:我正在使用 android Studio,我想知道应用程序在任何地方的目录(意味着每个非静态类)。
问题是,我正在创建一个名为 Constants 的类来总结我的应用程序中的任意常量。除了与应用程序目录相关的常量外,我的所有常量目前都是静态和公共的。我还实现了 Serializable 以将常量文件存储在某个文件中。我将通过 Constants 类中的静态方法导出和导入常量。真的是静态的:))
我知道 Context 类中的 getFilesDir() 不是静态的,这意味着我不能调用 MainActivity.getFilesDir().getAbsolutePath() 之类的东西,其中 MainActivity 扩展了 Activity 扩展了 Context。
我也不能这样做:
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)
很麻烦,而且它缺乏模块化,其他类在不实例化对象的情况下无法使用该类。
所以我的问题是,有没有一种方法可以访问类常量中的应用程序目录,而无需传入上下文扩展对象?
【问题讨论】:
你可以使用匕首。寻找依赖注入。它会帮助你。 【参考方案1】:简短回答:不,你不能。替代解决方法,使用 Application 类。示例:
class MyApp extends Application
public final Constants constants;
public void onCreate()
constants = new Constants(this);
还有你的清单:
<application
android:name="MyApp">
<activity></activity>
</application>
【讨论】:
以上是关于我可以在 UI 线程之外使用 getFilesDir的主要内容,如果未能解决你的问题,请参考以下文章