gpt4 book ai didi

java - doInBackground : Will it impact the performance? 内的新线程

转载 作者:行者123 更新时间:2023-11-30 02:16:15 26 4
gpt4 key购买 nike

如果我在 AsyncTaskdoInBackground 方法中启动一个新线程,从性能的角度来看是否可以?我写了一个从服务器下载文件的小程序。该方法在 doInBackground 中运行。现在,为了找出下载文件的当前大小,我启动了一个新线程,该线程读取通过管道传输到本地 File 对象的字节数。我需要这个来发布下载百分比。这是代码 fragment :

@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 有关?

最佳答案

不要那样做,我认为这不会影响用户可以判断的性能,但这只是一种不好的做法。而是使用此处描述的 Handler 类函数 postDelay: http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable , 长)

您可以将函数调用延迟到 X 秒,然后每次都再次调用它,直到下载完成:

Handler h = new Handler();
void doWork() {
h.postDelayed(new Runnable() {

@Override
public void run() {
// do work here...
if (!finish) {
doWork();
}
}
}, 1000);
}

关于java - doInBackground : Will it impact the performance? 内的新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com