异步任务如何阻塞主线程

问题描述

异步任务如何阻塞主线程

我在欢迎页面调用的百度定位的API,它是异步的任务,有时如果网络不够快,下面的代码继续执行时就会挂APP,因为欢迎页跳转后,后面的Activity有用到返回的数据,请问下大神有应该怎么阻塞它呢?我想让它返回结果后在继续执行我下面的代码

解决方案

不要阻塞主线程,不然异步就没意义了,还不如同步。你可以用事件通知主线程,主线程之后的代码放在事件中。

解决方案二:

就是主线程的跳转界面的代码放在事件回调中

解决方案三:

你可以把activity中需要返回数据部分的UI先不显示或者放一些缺省值。等异步返回了再更新

解决方案四:

主线程不能挂的,建议把异步任务丢到主线程所在的activity的底端,然后主线程的显示ui对象丢到完成异步任务的方法里进行更新,这样就可以实现主线程根据返回结果来更新UIle

时间: 2024-11-02 08:07:03

异步任务如何阻塞主线程的相关文章

自动登录 阻塞主线程

问题描述 如果设置了自动登录, 在刚启动程序时即 走didFinishLaunchingWithOptions 这个方法的时候 ,自动登录就会会阻碍主线程.,这个如果在网络条件不好的情况下,用户体验时极差的.请问 有什么解决方法.在哪里可以把自动登录的方法放在子线程中? 解决方案 自动登陆在初始化之前调用就行

ios-下载和设置UIImage不在主线程中

问题描述 下载和设置UIImage不在主线程中 从web服务器中添加一个图片.怎么设置它不在主线程上?我想要视图先加载,然后图片加载.这样用户在体验时不会感到很慢. 就是不知道怎么加到代码中. NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:mainImageUrl]]; UIImage *image = [ [UIImage alloc] initWithData:imageData]; UIView

GCD之全局、主线程

-(NSString *)fetchData { [NSThread sleepForTimeInterval:1]; return @"Hello world"; } -(NSString *)firstCast:(NSString *)data { [NSThread sleepForTimeInterval:2]; return [data uppercaseString]; } -(NSString *)secondCast:(NSString *)data { [NSThre

关于终止一个阻塞的线程的问题!!

问题描述 请教各位高手,我想在主线程中调用一个线程BB中使用到一个方法C:C是SOCKET通信方面的一个方法,一旦调用C,C就会一直阻塞程序,等待消息来到.我想在一段时间后如果没有消息来到,我就结束掉B,可是用ABORT()方法并不能终止掉阻塞的线程啊所以想问问该用什么方法?privatevoidbutton1_Click(objectsender,EventArgse){labelControl1.Text="数据上传中,请稍后!";workerThread=newThread(ne

怎么把主线程getText()得到的String放进子线程

问题描述 怎么把主线程getText()得到的String放进子线程 解决方案 不一定非要定义全局变量,我修改的如下,你运行看看,不行再定义全局变量.修改了3个地方 public class StartLoginActivity extends Activity { // 账号输入框 private EditText inputAccount; //密码输入框 private EditText inputPassword; // 登录按钮 private Button loginButton;

终止阻塞的线程

线程状态     我们知道,一个线程可以处于以下四种状态之一:     1. 新建(New):当线程被创建时,它只会短暂地处于这种状态.此时它已经分配了必须的系统资源,并执行了初始化.此刻线程已经有资格获取CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态.     2. 就绪(Runnable):在这种状态下,只要调度器将CPU时间片分给线程,线程就可以运行.也就是说,在任意时刻,线程可以运行也可以不运行.     3. 阻塞(Blocked):线程能够运行,但有某个或多个条件阻止

c++中如何将子线程的参数传回主线程

问题描述 c++中如何将子线程的参数传回主线程 1C DWORD WINAPI threadFunction(LPVOID pArg) //返回值进程id(dword类型) 参数类型 LPVOID{ tNum myNum = *((tNum *)pArg); //将参数转化成int型 EnterCriticalSection(&gCS); // 进入临界区 myNum.string_back = FuzzyHash(myNum.string_in); LeaveCriticalSection(&a

VC 控制台程序串口通讯,串口收到数据如何发送消息给主线程?

问题描述 VC 控制台程序串口通讯,串口收到数据如何发送消息给主线程? 用CSerialPort类实现串口通讯,该类在收到数据后会调用::sendmessage函数,该函数的第一个参数是窗口句柄,但是控制台没有窗口句柄,该怎么发送消息?main函数里怎么响应消息? 解决方案 sendmessage wm_copydata 解决方案二: 控制台程序可以调用http://blog.csdn.net/coredoor/article/details/8582001

安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错

问题描述 安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错 先上logcat: 我的xml布局就是一个按钮,和一个listview,listview里就一个imageview,按下按钮开始从网络获取图片,然后发消息到主线程,然后listview就填充数据.xml代码就不贴了. 以下是mainactivity public class MainActivity extends AppCompatActivity implements View.OnClickList