Android如何从主要活动之外读取资产

时间:2010-11-08 17:37:07

标签: android assets

我需要能够从应用程序的主要活动之外调用readAsset。我听说有人提到需要传递Context,但语言一直很模糊。有人可以描述添加将readAsset调用到不是主要活动的现有类的能力所需的步骤吗?在主活动中创建一个公共函数,并让其他调用不能作为我需要添加readAsset的地方,在一个单独的线程中。

3 个答案:

答案 0 :(得分:7)

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);
  }
}

答案 1 :(得分:0)

请注意,所有文件系统访问都应该在主线程上完成,因此在onCreate()期间不应该读取它们。相反,你应该使用另一个线程,例如由AysncTask提供。

答案 2 :(得分:0)

要读取资产,您需要Context,但不必 必须使用Activity作为Context;您可以改为使用Application对象。

Android Context without being in an activity? And other activity-less programming?

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 injecting Android Contextthis issue filed on the Danger github repo。)