gpt4 book ai didi

android - 如果 Asynctask 不是为了做长时间的后台处理那么我应该使用什么方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:52 25 4
gpt4 key购买 nike

我大部分时间都在使用 Asynctask,但在当前应用程序中下载的数据太大,所以我可以使用其他方法进行后台下载,我实际上不确定处理程序是否用于此目的。

最佳答案

but in the current app the data downloaded is too big so what other method i can use to do background downloading,

我不同意你的标题,因为 doInBackground 是一种专门用于长时间任务的方法。所以 AsyncTask 是非常强大的工具,也是类型安全的。

但还有另一种解决方法。
另一种简洁高效的方法是将 IntentServiceResultReceiver 一起使用。

当您决定将 IntentServiceResultReceiver 一起使用时,这里是基本示例


只需创建从IntentService 扩展的类,然后您必须实现它的方法onHandleIntent

protected void onHandleIntent(Intent intent) {  
String urlLink = intent.getStringExtra("url");
ResultReceiver receiver = intent.getParcelableExtra("receiver");
InputStream input = null;
long contentLength;
long total = 0;
int downloaded = 0;
try {
URL url = new URL(urlLink);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// ...
Bundle data = new Bundle();
data.putInt("progress", (int) (total * 100 / contentLength));
receiver.send(PROGRESS_UPDATE, data);
}
//...
}

ResultReceiver 中的onReceiveResult 实现:

@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
if (resultCode == DownloadService.PROGRESS_UPDATE) {
int progress = resultData.getInt("progress");
pd.setProgress(progress);
pd.setMessage(String.valueOf(progress) + "% was downloaded sucessfully.");
}
}

要启动您的服务,只需使用

Intent i = new Intent(this, DownloadService.class);
i.putExtra("url", <data>); // extra additional data
i.putExtra("receiver", new DownloadReceiver(new Handler()));
startService(i);

所以在你的IntentService中让你的工作和

receiver.send(PROGRESS_UPDATE, data);

您可以简单地发送有关更新 UI 进度的信息。

注意:但是查看更多关于IntentService的信息纳德ResultReceiver .

关于android - 如果 Asynctask 不是为了做长时间的后台处理那么我应该使用什么方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168810/

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