草庐IT

asynctasks

全部标签

android - Android 上的 AsyncTask 和错误处理

我正在将我的代码从使用Handler转换为AsyncTask。后者非常擅长它的工作-在主UI线程中异步更新和处理结果。我不清楚的是,如果AsyncTask#doInBackground中出现问题,如何处理异常。我这样做的方法是有一个错误处理程序并向它发送消息。它工作正常,但它是“正确”的方法还是有更好的选择?我也明白,如果我将错误处理程序定义为一个Activity字段,它应该在UI线程中执行。但是,有时(非常不可预测)我会收到一个异常,指出从Handler#handleMessage触发的代码正在错误的线程上执行。我应该在Activity#onCreate中初始化错误处理程序吗?将ru

android - 最佳实践 : AsyncTask during orientation change

AsyncTask是在另一个线程中运行复杂任务的好东西。但是当AsyncTask仍在运行时发生方向更改或其他配置更改时,当前的Activity将被销毁并重新启动。当AsyncTask的实例连接到该Activity时,它会失败并导致“强制关闭”消息窗口。所以,我正在寻找某种“最佳实践”来避免这些错误并防止AsyncTask失败。到目前为止我看到的是:禁用方向更改。(肯定不是你应该处理的方式。)让任务存活并通过onRetainNonConfigurationInstance用新的Activity实例更新它Activity销毁时取消任务,Activity再次创建时重新启动。将任务绑定(bin

android - 哪些参数被传递到 AsyncTask<arg1, arg2, arg3>?

我不明白我应该在这里输入什么以及这些争论的最终结果是什么?我到底应该放什么,它到底会去哪里?我需要包括所有3个还是可以包括1、2、20? 最佳答案 Google的Android文档说:异步任务由3个通用类型定义,称为Params、Progress和Result,以及4个步骤,称为onPreExecute、doInBackground、onProgressUpdate和onPostExecute。AsyncTask的泛型类型:异步任务使用的三种类型如下:Params,thetypeoftheparameterssenttothetas

android - 同时运行多个 AsyncTask —— 不可能吗?

我正在尝试同时运行两个AsyncTask。(平台为Android1.5,HTCHero。)但是,只有第一个被执行。这是一个简单的fragment来描述我的问题:publicclassAndroidJunkextendsActivity{classPrinterTaskextendsAsyncTask{protectedVoiddoInBackground(String...x){while(true){System.out.println(x[0]);try{Thread.sleep(1000);}catch(InterruptedExceptionie){ie.printStackT

android - AsyncTask 真的在概念上存在缺陷还是我只是遗漏了什么?

我已经对这个问题进行了几个月的调查,并提出了不同的解决方案,但我对此并不满意,因为它们都是大规模的黑客攻击。我仍然无法相信一个设计有缺陷的类进入了框架并且没有人在谈论它,所以我想我一定是遗漏了一些东西。问题在于AsyncTask。根据文档它"allowstoperformbackgroundoperationsandpublishresultsontheUIthreadwithouthavingtomanipulatethreadsand/orhandlers."接下来的例子继续展示一些示例性的showDialog()方法是如何在onPostExecute()中调用的。然而,这对我来说

android - 由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主要 Activity ?

我有这两个类(class)。我的主要Activity和扩展AsyncTask的Activity,现在在我的主要Activity中,我需要从AsyncTask中的OnPostExecute()获取结果>。如何将结果传递或获取到我的主Activity?这里是示例代码。我的主要Activity。publicclassMainActivityextendsActivity{AasyncTaskasyncTask=newAasyncTask();@OverridepublicvoidonCreate(BundleaBundle){super.onCreate(aBundle);//Calling

android - 处理程序 vs AsyncTask vs 线程

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭3年前。Improvethisquestion我对Android中Handlers、AsyncTask和Threads之间的区别感到有些困惑。我在StackOverflow上阅读了很多博客和问题。Handler是后台线程,可让您与UI进行通信。例如,更新进度条应该通过Handler来完成。使用Handlers你有MessagingQueues的优势,所以如果你想安排消息或更新多个UI元素或有重复的任务。AsyncTask类似,其实都是

java - 无法在 AsyncTask 中为 ProgressDialog 调用 Looper.prepare() 的线程内创建处理程序

我不明白为什么会出现此错误。我正在使用AsyncTask在后台运行一些进程。我有:protectedvoidonPreExecute(){connectionProgressDialog=newProgressDialog(SetPreference.this);connectionProgressDialog.setCancelable(true);connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);connectionProgressDialog.setMessage("Connecting

java - 从 Android 中的 AsyncTask 返回一个值

这个问题在这里已经有了答案:HowtogettheresultofOnPostExecute()tomainactivitybecauseAsyncTaskisaseparateclass?(17个回答)关闭6年前。一个简单的问题:是否可以在AsyncTask中返回一个值?//AsyncTaskisamemberclassprivateclassMyTaskextendsAsyncTask{protectedVoiddoInBackground(Void...params){//dostuffreturnnull;}@OverrideprotectedvoidonPostExecute

java - Android - 为 AsyncTask 设置超时?

我有一个执行的AsyncTask类,它从网站下载大量数据。如果最终用户在使用时数据连接非常缓慢或不稳定,我想在一段时间后使AsyncTask超时。我的第一个方法是这样的:MyDownloaderdownloader=newMyDownloader();downloader.execute();Handlerhandler=newHandler();handler.postDelayed(newRunnable(){@Overridepublicvoidrun(){if(downloader.getStatus()==AsyncTask.Status.RUNNING)downloader