我正在编写一个voip应用程序。它基于管理voip逻辑的服务和用于调用电话、应答等的UI。从服务更新UI的最佳方式是什么:runOnUiThread或AsyncTask或处理程序或发布什么时候使用一种方法而不是另一种方法?我知道runOnUiThread是有问题的,因为它可能会导致事件乱序运行(如果线程已经是UI线程)。谢谢。 最佳答案 据我所知,您不能直接从服务更新屏幕。您必须使用广播接收器从服务中捕获您的广播。我想AsyncTask本身使用runOnUiThread,但它提供了在后台线程中执行一个方法并将结果放入UI线程的好方法
我有一个管理soap请求的类(如辅助类),而不是Activity。我使用此类通过方法doInBAckground发送来自Activity的soap请求,并通过onpostexecute捕获来自webservice的所有返回值。一切正常,但我的问题从此时开始,因为我无法将返回值异步任务类传递给主类。 最佳答案 你可以有一些可用的实用类作为单例(好吧,单例是危险的模式但它在android中的使用是合理的,直到我们得到理智和usabel依赖注入(inject))并在那里传递结果。优点:-不干扰Intent/可串行化-传递数据或调用一些方法
在Android中使用facebook。有时,当我尝试在Android中而不是在模拟器中授权Facebook时,我的应用程序正在实时设备中兑现。我使用了AndroidFacebookSDK。所以我认为线程可能会阻止它。首先尝试异步任务Activityact=this;privateclassfbworkextendsAsyncTask{@OverrideprotectedStringdoInBackground(Facebook...para){//TODOAuto-generatedmethodstubLog.d(tagg,"Enteredasync");if(loginflag==
我必须将数据上传到服务器。我正在使用与我的应用程序在同一进程上运行的服务。我应该为上传过程使用单独的线程还是应该使用AsyncTask将数据上传到服务器?更具体地说,我可以在服务类中使用AsyncTask吗?我应该使用它吗?此服务应始终在内存中运行,以便每5秒向服务器发送一次数据。 最佳答案 在服务中使用AsyncTask没有问题。注意/修复:我说服务在后台运行是错误的,它只适用于IntentService。如评论和documentation中所述,服务不会创建自己的线程:Caution:Aservicerunsinthemaint
Android2.2设备上的奇怪错误。以下适用于所有设备,直到最近在GT-I5510中我们才遇到此错误。我们的应用程序支持最低sdk-level8。从设置中清除应用程序数据并启动应用程序解决了这个问题,但我不明白为什么它不能找到类..添加了Android支持库。java.lang.NoClassDefFoundError:android.os.AsyncTaskatcom.example.android.library.stTest.stController.runTests(stController.java:228)atcom.example.android.myapp.Fragm
我正在使用AsyncTask在ListView中加载一些图像。它看起来像这样:privatevoidloadImageInBackground(ViewHolderholder,Locationlocation){ImageViewLoadercoverImageLoader=newImageViewLoader(holder.locationImage,coversImgCache);coverImageLoader.execute(location.getImageUrl());}其中ImageViewLoader只是一个扩展的AsyncTask。据我了解,垃圾收集器会收集所有不再
在android中,我试图防止内存泄漏。我继承了一些遗留代码,开发人员在其中创建了一个asyncTask作为匿名内部类,如下所示:voidstartAsyncTask(){newAsyncTask(){@OverrideprotectedVoiddoInBackground(Void...params){while(true);//looptokeepthreadaliveforever.}}.execute();}所以我在这个例子中使用了一个循环,只是为了让子线程永远保持Activity状态,这样我就可以演示我的观点。所以从Activity中如果我调用startAsyncTask()
所以我有一个AsyncTask处理上传到服务器,同时调用NotificationHelper类来更新通知栏以显示当前上传百分比。那部分工作正常,我遇到的唯一问题是让Action正常工作并能够使用Action发送的Intent(最近的尝试是在父Activity中使用广播管理器,但我从未收到消息)。如果有人能指出我正确的方向,将不胜感激。这里是一些代码:mNotificationManager=(NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);Intentintent=newIntent
我正在尝试创建一个类似于那个的应用程序:Anappwithsomeimagesanddescription(cardview)inarecyclerview首先,我从数据库中加载CardView的所有信息图像的标题、描述和图像的URL。当我将所有信息放入RecyclerView时,(标题和描述)显示正确,但对于图像,我创建了一个AsyncTask类来从URL加载图像,让用户不必等待太多时间等待应用程序响应。如果用户滚动缓慢,图像加载正确,一切都很好,但如果我快速滚动,我会遇到一些问题,例如,第3项中显示的图像显示在最后一项中,直到最后一项的图像已加载并刷新....这里是我加载图像的适配
我的应用程序中有一个ASyncTask实例,用于将用户登录到应用程序中,问题是当ASyncTask执行“onPostExecution”函数时,ASyncTask线程保持“运行”状态(如Eclipse调试器)。onPostExecution仅修改UI组件并(在成功登录的情况下)启动新Activity。如何终止线程? 最佳答案 为了执行AsyncTask,Android使用了一个线程池,所以所有的Thread对象都会被自动回收。因此,无需手动终止线程。对于此作业,AsyncTask中有两个静态字段:SERIAL_EXECUTOR和TH