`

android开发笔记-Handler的理解

 
阅读更多

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的使用玩转Android---组件篇---Handler的使用

    netty-handler-4.1.73.Final-API文档-中文版.zip

    赠送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....

    netty-handler-4.1.68.Final-API文档-中文版.zip

    赠送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....

    netty-handler-4.1.24.Final-API文档-中文版.zip

    赠送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-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代码-android-weak-handler

    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...

    netty-handler-proxy-4.1.68.Final-API文档-中文版.zip

    赠送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-...

    netty-handler-4.1.65.Final-API文档-中文版.zip

    赠送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....

    netty-handler-proxy-4.1.73.Final-API文档-中文版 (1).zip

    赠送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-...

    netty-handler-proxy-4.1.73.Final-API文档-中英对照版.zip

    赠送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-...

    netty-handler-4.1.74.Final-API文档-中文版.zip

    赠送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....

    netty-handler-4.1.65.Final-API文档-中英对照版.zip

    赠送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....

    hive-hbase-handler-3.1.1.jar

    HBase2.1.3整合Hive3.1.2,Hive官方的hive-hbase-handler-3.1.1.jar包不好用,自己编译后的,确认好用

    hive-hbase-handler-1.2.2.jar

    hive1.2.2版本和hbase1.0.2的通信包,重新封装的,也进行了相关代码的删除和部分修改

    hive-hbase-handler-1.2.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包

    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。经测试没有问题。

    android学习--handler

    NULL 博文链接:https://baishou520.iteye.com/blog/2112525

    netty-handler-4.1.23.Final-API文档-中文版.zip

    赠送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....

Global site tag (gtag.js) - Google Analytics