【发布时间】:2015-03-27 17:24:27
【问题描述】:
如果我在AsyncTask 的doInBackground 方法中启动一个新线程,从性能的角度来看可以吗?
我写了一个从服务器下载文件的小程序。该方法在doInBackground 内运行。现在,为了找出下载文件的当前大小,我启动了一个新线程,它读取通过管道传输到本地File 对象的字节数。我需要这个来发布下载百分比。这是代码sn-p:
@Override
protected Void doInBackground(Void... params) {
try {
client.download(dir + "/" + component0, new java.io.File(
Environment.getExternalStorageDirectory() + "/"
+ component0));
Thread trd = new Thread(new Runnable() {
@Override
public void run() {
while (tempfile.length() != filesize) {
if (tempfile.length() * 100 / filesize != percent) {
percent = (int) (tempfile.length() * 100 / filesize);
publishProgress(percent);
}
}
}
});
trd.start();
} catch (IllegalStateException | IOException
| FTPIllegalReplyException | FTPException
| FTPDataTransferException | FTPAbortedException e) {
e.printStackTrace();
}
return null;
}
该程序运行良好,但下载速度似乎比应有的慢了一点。是否与在 doInBackground 方法中创建的新 Thread 有关?
【问题讨论】:
-
你知道在 doinbackground 中启动另一个线程没有意义吗?
-
我明白这一点,但不幸的是,我无法知道本地设备上的文件大小。我的问题是,它会影响 doInBackground 的性能吗?
-
如果可行的话,为什么不计算下载的字节数,而不是检查文件大小?不,它不会产生性能差异,只要您不经常运行第二个线程太。
标签: java android multithreading file android-asynctask