我需要能够从我的应用程序的主要活动之外调用 readAsset。我听说有人提到需要传递上下文,但语言非常模糊。有人可以描述将调用 readAsset 的能力添加到不是主要活动的现有类的必要步骤吗?在主要活动中创建一个公共函数并让其他调用不起作用,因为我需要将 readAsset 添加到的地方是在一个单独的线程中。
问问题
7158 次
3 回答
8
public class NonActivity {
public void doStuff(Context c) {
//read from assets
c.getAssets();
//use assets however
}
}
不知道你在问什么,但也许是这样的?只需添加到现有类,并使用上下文来检索资产。在您的活动中调用如下方法:
public class MyActivity extends Activity {
public void OnCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NonActivity n = new NonActivity();
n.doStuff(this);
}
}
于 2010-11-08T17:52:36.543 回答
2
要读取资产,您需要 a Context
,但不必使用 aActivity
作为您的Context
; 您可以改用该Application
对象。
没有活动的Android Context?和其他无活动编程?
public class MyApplication extends Application {
private static MyApplication instance;
public MyApplication() {
instance = this;
}
public static MyApplication getInstance() {
return instance;
}
}
您需要先将android:name
属性添加到<application>
元素中AndroidManifest.xml
:
<application android:name="com.example.MyApplication" ... />
现在您可以MyApplication.getInstance().getAssets()
从任何地方进行静态调用。
或者,您可以使用Dagger依赖注入将一个Application
直接注入您的对象。(注入Application
上下文有点棘手。请参阅Dagger 2 injectioning Android Context和这个问题在 Danger github repo 上提交。)
于 2019-04-20T23:27:40.983 回答
0
请注意,所有文件系统访问都应在主线程之外完成,因此您不应在 onCreate() 期间读取它们。相反,您应该使用另一个线程,例如 AysncTask 提供的线程。
于 2017-06-23T15:33:38.047 回答