所以,我在Android应用程序中做了一些繁重的工作。我将一些字节写入文件。但问题是,如果我在主线程上执行此操作,则应用程序将崩溃,因为有时字节数组的长度非常大。因此,我决定在异步任务中将字节写入文件功能。问题是要做到这一点,我需要一个上下文,并且您无法在异步任务的doInBackground()中访问上下文。我的编码在这里是无关紧要的,因为我的问题是我需要我的应用程序或活动的上下文不为null,并且可以通过doInBackground()方法进行访问。我读过一篇有关如何提供服务的文章,但我真的不明白。
例如,我的字节数组长度为5234400字节。将其转换为文件需要大量内存,因此最好在另一个线程中执行。而且,我不使用压缩功能,因为它们大多数都是无用的。
我说这不是重复的。我想将上下文传递给 resultNumber = new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(yourNumber);
方法。
我的问题:是否可以在doInBackground()函数中访问上下文?或者,如果没有,那么如何单击按钮才能使用服务,而不是一直打开它。以及服务如何工作以及如何设置?
第二个(次要)问题:是否有一种压缩字节的方法,所以长度不是那么大吗?
对于那些想要代码的人来说就是这样:
doInBackground()
答案 0 :(得分:2)
一种方法可以使用服务,但是它需要创建服务,创建代码以同步服务和活动之间的通信等等。
完成任务的快速方法是使用作为Context子级的Application实例。为此,在Application类中,定义对创建应用程序时创建的实例的静态引用。假设SampleApplication
是您的应用程序类名称:
public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
instance=this;
...
}
public static SampleApplication getInstance() {
return instance;
}
private static instance;
}
因此,在后台任务中,只需使用SampleApplication.getInstance()
就可以轻松使用Application上下文。
最好不要在后台任务中使用Activity
或Fragment
作为上下文,因为如果在任务期间破坏了活动/片段,它们可能会失效。