Android-java android 线程异步问题
请问各位高手们,线程的异步问题如何处理呢?
如下问题:
我想通过网络获取数据,但android4.0以上的系统不能在onCreate()中执行网络获取,只能新建线程获取。但执行A线程获取网络数据还没有完成,oncreate()就已经执行了下面的数据操作了,值都还没有获取到。
上面的问题需要如何解决呢?不知道各位是如何设计多线程的交互呢? 有什么技巧吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
多线程实现方法有多种,可以继承Thread 、完成Runable接口,安卓也有一个自带的类AsyncTask来完成。因为网络操作是一种相对耗时的操作,所以为了不阻塞UI线程,所以需要线程异步来实现。用Thread实现可以将其他的操作都放到Handler里面来执行,AsyncTask的doPostExceute里面执行,就能保证是在数据获取到以后才执行后面的操作了!
线程的目的就是异步,先加载基本UI,得到线程执行结果,再更新UI。
如果你需要线程中的一个值做运算,那运算的部分,应该也在线程中执行才对。
1、最好不要阻塞UI线程。
2、如果在异步加载完之前不想做其他处理,可以UI使用一个进度条来显示进度。异步加载完成后通过UI线程的handler来启动后续的处理。
这是一个 常见的问题, android 文档里 写的很清楚:
http://developer.android.com/guide/components/processes-and-threads.html
两个原则:
1) Do not block the UI thread
2) Do not access the Android UI toolkit from outside the UI thread
不要阻塞UI线程, 不要在非UI线程里去操作UI.
两个方法:
1) 用
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
等. 这些Runnable会放在UI线程里执行.
2) AsyncTask
你定义类继承AsyncTask, 覆写doInBackground(), onPostExecute()等方法. doInBackground()在后台线程做. doInBackground()执行完成后, 用返回结果调用onPostExecute()放在UI线程里执行.