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开发教程及笔记将涵盖Android系统的基本架构、应用程序生命周期管理以及UI设计等核心概念。 1. **Android系统架构**:Android系统分为应用层、应用框架层、系统运行库层和Linux内核层。开发者主要在应用...
这篇新版的Android开发教程笔记将带你进入Android编程的世界,从最基础的入门概念开始讲解。本文主要围绕以下几个关键知识点展开: 1. **Android SDK(软件开发工具包)**:Android SDK是开发者进行Android应用开发...
《Android开发笔记全集》是一份综合性的学习资源,涵盖了Android应用开发的多个核心领域,旨在帮助开发者系统地掌握Android平台的开发技能。这个压缩包包含的文件名为“Android开发笔记”,暗示着它可能是一个系列的...
《Android群英传笔记》是一本深度探讨Android开发技术的宝贵资料,由知名开发者刘某人倾力编写。这本书详尽地涵盖了Android应用开发的各个方面,旨在帮助读者从基础到高级全面掌握Android编程技能。笔记内容丰富,...
在Android开发领域,基础知识是构建复杂应用的基石。这篇新版的Android开发教程——"基础入门二"涵盖了Android开发的关键概念和技术,旨在帮助初学者迅速掌握Android应用开发的基本技能。以下是对教程内容的详细概述...
这份"Android开发教程笔记完全版"涵盖了Android开发的基础到高级主题,旨在帮助开发者全面理解并掌握Android应用的构建过程。 一、Android系统概述 Android是由Google主导的开源操作系统,基于Linux内核。它的开放...
这份"android开发笔记入门级"资源,正是为了帮助初学者系统地学习和理解Android应用开发所准备的。它以易懂的方式,逐步引导学习者深入这个充满机遇的领域。 首先,我们要明白Android是一个开源的操作系统,主要...
总之,《Android开发艺术探索》是一本全面覆盖Android开发关键领域的书籍,结合清晰的PDF、实际的源码示例和有价值的读书笔记,为开发者提供了一条系统学习和提升技能的道路。无论是初学者还是经验丰富的开发者,都...
"新版Android开发教程&笔记2--基础入门二"聚焦于为开发者提供最新的Android开发知识,帮助初学者迅速掌握Android应用开发的基本概念和技术。这篇教程可能涵盖了以下几个核心知识点: 1. **Android Studio入门**:...
这份"Android开发教程笔记完全版.zip"包含了一份详细的Android编程学习资源,可能是由一位经验丰富的开发者或教育者整理而成,旨在帮助初学者和有经验的开发者深入理解Android应用开发。 **Android系统架构** ...
这篇“Android开发笔记,代码+实例”教程,正如其标题所示,提供了全面的入门指导,旨在帮助新手快速上手并精通Android应用开发。它不仅包含了理论知识,更注重通过实际代码示例来加深理解。 一、Android开发环境...
Android教程笔记涵盖了大量的知识点,是学习Android开发的重要资源。以下是对这些笔记的详细解析: 1. **Android基础知识**:这是Android开发的起点,包括对Java语言的理解,因为Android应用程序主要用Java编写。...
【Android开发笔记:Handler使用总结】 在Android应用开发中,Handler是处理线程间通信和UI更新的关键组件。当应用程序启动时,Android系统会默认创建一个主线程(UI线程),该线程主要负责管理界面中的UI控件,...
这篇笔记详细地涵盖了安卓开发的基本概念、环境搭建、编程语言、UI设计、事件处理、数据存储以及网络通信等多个方面。下面将按照每一天的学习内容进行详细阐述。 ### Day01: 安卓环境搭建与Hello World 在第一天的...
这份"Android开发教程笔记完全版"的压缩包文件包含了全面的学习资料,对于初学者和有一定经验的开发者来说,都是宝贵的资源。下面我们将深入探讨其中可能涵盖的知识点。 1. **Android系统架构**:Android系统分为...
这份"Android开发教程笔记完全版"涵盖了Android应用开发的各个方面,旨在帮助初学者和有一定经验的开发者深入理解平台的工作原理,提升开发技能。 首先,笔记可能从Android的基础知识开始,介绍Android操作系统的...
总的来说,这份"android开发笔记"全面覆盖了Android开发的基础知识,是初学者的宝贵参考资料,能够帮助他们快速理解和掌握Android开发的核心概念和技术。通过学习这些内容,开发者可以建立起坚实的Android开发基础,...