1.Handler的定义:
在主线程中创建, 用于接收子线传递过来的数据, 更新主线程UI.
2.Handler特点:
1.Handler可以分发Message对象和Runnable对象到主线程中
2.每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程)
3.详细解释:
对于一些耗时操作如:用户登录时请求网络数据, 文件读写等, 需要创建一个子线程(以免造成主线程假死现象).在子线程
中处理这些耗时操作, 这过程中需要更新主线程UI的话, 将结果传递给handler , 通过handler更新UI.
4.为什么要通过handler更新主线程, 在子线程更新主线程UI有问题吗:
因为主线程view是线程不安全的. 如果在子线程中更新主线程UI, 会造成线程直接的竞争,这样会很危险. 需要统一到主线程更新UI操作.
5. 例子:
已加载用户信息为例:
1). 在主线程创建Handler
mHandler = new Handler(){
//取消ProgressDialog提示框, 通过Toast提示用户数据加载成功.
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TASK_PROCED:
if(mProgressDialog!=null){
mProgressDialog.cancel();
}
Toast.makeText(UserDetailsActivity.this, "用户信息加载成功", Toast.LENGTH_LONG).show();
}
}
};
2). 在子线程中发送数据到主线程:
private class LoadUser extends AsyncTask<Void, Void, String>{
@Override
protected String doInBackground(Void... params) {
try {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(UserDetailsActivity.this);
String userName = Preferences.getUserName(prefs);
String passowrd = Preferences.getUserPassword(prefs);
Foursquared foursquared = (Foursquared) getApplication();
Foursquare foursquare = foursquared.getFoursquare();
//根据用户名和密码重新更新用户信息
User user = foursquare.loginUser(userName, passowrd);
if(user!=null){
Log.i("UserDetailsActivity" , "mail = "+user.getEmail());
}else{
Log.i("UserDetailsActivity" , " user is null");
}
Preferences.storeUser(prefs.edit(), user);
if(user!=null){
Message msg = new Message();
msg.what = TASK_PROCED ;
mHandler.sendMessage(msg); //向主线程发送数据.
}
} catch (FoursquareCredentialsException e) {
e.printStackTrace();
} catch (FoursquareParseException e) {
e.printStackTrace();
} catch (FoursquareException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
};
参考文章: http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4582.html
分享到:
相关推荐
玩转Android---组件篇---Handler的使用玩转Android---组件篇---Handler的使用玩转Android---组件篇---Handler的使用
赠送jar包:netty-handler-4.1.73.Final.jar; 赠送原API文档:netty-handler-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.73....
赠送jar包:netty-handler-4.1.68.Final.jar; 赠送原API文档:netty-handler-4.1.68.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.68....
赠送jar包:netty-handler-4.1.24.Final.jar; 赠送原API文档:netty-handler-4.1.24.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.24.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.24....
被编译的hive-hbase-handler-1.2.1.jar,用于在Hive中创建关联HBase表的jar,解决创建Hive关联HBase时报FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop....
Android Weak Handler Memory safer implementation of android.os.Handler Problem Original implementation of Handler always keeps hard reference to handler in queue of execution. Any object in Message or...
赠送jar包:netty-handler-proxy-4.1.68.Final.jar; 赠送原API文档:netty-handler-proxy-4.1.68.Final-javadoc.jar; 赠送源代码:netty-handler-proxy-4.1.68.Final-sources.jar; 赠送Maven依赖信息文件:netty-...
赠送jar包:netty-handler-4.1.65.Final.jar; 赠送原API文档:netty-handler-4.1.65.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.65.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.65....
赠送jar包:netty-handler-proxy-4.1.73.Final.jar; 赠送原API文档:netty-handler-proxy-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-proxy-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-...
赠送jar包:netty-handler-proxy-4.1.73.Final.jar; 赠送原API文档:netty-handler-proxy-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-proxy-4.1.73.Final-sources.jar; 赠送Maven依赖信息文件:netty-...
赠送jar包:netty-handler-4.1.74.Final.jar; 赠送原API文档:netty-handler-4.1.74.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.74.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.74....
赠送jar包:netty-handler-4.1.65.Final.jar; 赠送原API文档:netty-handler-4.1.65.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.65.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.65....
HBase2.1.3整合Hive3.1.2,Hive官方的hive-hbase-handler-3.1.1.jar包不好用,自己编译后的,确认好用
hive1.2.2版本和hbase1.0.2的通信包,重新封装的,也进行了相关代码的删除和部分修改
Hive-1.2.1与HBase-1.3.1兼容处理的jar包 hive-hbase-handler-1.2.2.jar
hive0.8.1和hbase0.92.0集成的hive-hbase-handler.Jar包,里面包含:hbase-0.92.0.jar、hbase-0.92.0-tests.jar、hive-hbase-handler-0.9.0-SNAPSHOT.jar。经测试没有问题。
NULL 博文链接:https://baishou520.iteye.com/blog/2112525
赠送jar包:netty-handler-4.1.23.Final.jar; 赠送原API文档:netty-handler-4.1.23.Final-javadoc.jar; 赠送源代码:netty-handler-4.1.23.Final-sources.jar; 赠送Maven依赖信息文件:netty-handler-4.1.23....