android子线程handler获取数据
来源:互联网 发布:绝地求生什么时候优化 编辑:程序博客网 时间:2024/06/02 04:17
今天和大家分享下android 获取接口时,开通子线程进行异步获取数据。
我这边选用的是handler机制。在handler有多种获取方法。今天介绍的是一种比较流行,效率较高的一种方法:obtainMessage()。这种用的相对较少,毕竟常见的是sendMessage()。我们先来对比下,首先看sendMessage的写法
private Handler handler = new Handler() {
@SuppressLint("ShowToast")
@Override
public void handleMessage(Message msg) {
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
case 1:
break;
case 2:
break;
case -1:
break;
}
}
super.handleMessage(msg);
}
};
private void sendMsg(int flag) {
Message msg = new Message();
msg.what = flag;
handler.sendMessage(msg);
}
使用的话直接就是 sendMsg(1);
源码为:
- /**
- * Returns a new {@link android.os.Message Message} from the global message pool.
- * More efficient than creating and allocating new instances.
- * The retrieved message has its handler set to this instance
- * (Message.target == this).
- * If you don't want that facility, just call Message.obtain() instead.
- */
- public final Message obtainMessage()
- {
- return Message.obtain(this);
- }
而obtainMessage()的使用是:
private Handler mHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (“当前activity”!= null && !"当前activity".isFinishing()) { Result result = (Result) msg.obj; if (result != null) { List<Qiang> qiangs = result.getData(); if (qiangs != null) { mAdapter.setQiangs(qiangs); } } } return false; }});
mHandler.obtainMessage(0, result).sendToTarget();//result是object类型的,可以看下源码
public final Message obtainMessage(int what, Object obj){ return Message.obtain(this, what, obj);}我们在看看sendToTargt()的源码:/** * Pushes a message onto the end of the message queue after all pending messages * before the current time. It will be received in {@link #handleMessage}, * in the thread attached to this handler. * * @return Returns true if the message was successfully placed in to the * message queue. Returns false on failure, usually because the * looper processing the message queue is exiting. */public final boolean sendMessage(Message msg){ return sendMessagmeDelayed(msg, 0);}备注中写的比较详细了,这个msg不是new出来的,而是message queue中的,省去了对象申请的内存,建议大家还是按照obtainMessage()的写法来写:)
0 0
- android子线程handler获取数据
- android子线程创建handler
- Android 子线程创建handler
- Android Handler 主线程 子线程 双向通信
- Android Handler 主线程 子线程 双向通信
- Android Handler 主线程 子线程 双向通信
- Android子线程创建Handler方法
- Android Handler 主线程 子线程 双向通信
- android handler,looper子线程间通信
- Android子线程创建Handler方法
- Android中怎么使用Looper和Handler进行子线程数据操作和提交到UI线程
- android 子线程不用handler 控制UI线程中的组件
- Android线程1 Handler处理更新UI子线程问题
- 子线程创建Handler
- Handler:子线程往主线程传递数据
- handler通信(子线程传数据到主线程)
- Android之Handler实时获取最新数据
- Android-初识Handler-子线程异步更新UI
- WWDC2014之App Extensions学习笔记
- @Repository、@Service、@Controller 和 @Component
- C++学习笔记:为什么不要重载逻辑与和逻辑或&& || 操作符
- python string unicode字符串
- svm小结
- android子线程handler获取数据
- Android存储子系统
- Catch That Cow
- Android AccessibilityService 使用详解
- java中判断字符串是否为数字的方法的几种方法
- UIPageController的使用
- React富交互性的动态用户界面
- OO实现ALV
- QT 控件和ID绑定 QObjectUserData