六、Android学习第五天——Handler的使用(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html)

六、Android学习第五天——Handler的使用

注意:有很多功能是不能写在Activity中的,例如说下载或者处理大量的数据等,如果这类操作写在Activity中,就有可能导致整个Activity无响应甚至报错,这样用户体验就会比较差。所以此类功能应该独立于Activity,且互不干扰,所以Handler就应运而生了。Handler提供了一个异步的消息处理的方案,将具体复杂的操作都放在一个线程中取处理。

创建一个Handler对象的基本步骤如下:

(一)点击一个按钮,调用Handler的post方法,将要执行的线程对象添加到队列当中去。

(二)将要执行的操作写在线程对象的run()方法当中。

(三)如果想要循环执行,则可以在run方法内部执行Handler的postDelayed或者post方法,将线程反复加入到队列当中。

下面是使用Handler的一个简单的例子:

package mickey.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class HandlerTest extends Activity {

// 声明两个按钮控件
private Button begin = null;
private Button end = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// 根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
begin = (Button) findViewById(R.id.begin);
begin.setOnClickListener(new StartButtonListener());
end = (Button) findViewById(R.id.end);
end.setOnClickListener(new EndButtonListener());

}

// 为start按钮设置的监听器
class StartButtonListener implements OnClickListener {

@Override
public void onClick(View v) {
// 无延迟,直接加入消息队列中,此时消息队列中只有此一个线程
// 调用handler的post方法,将要执行的线程对象添加到队列当中去
handler.post(updateThread);
}

}

// 为end按钮设置的监听器
class EndButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
handler.removeCallbacks(updateThread);
}
}

// 创建一个Handler对象
Handler handler = new Handler();
// 一个线程类,将要执行的操作写在线程对象的run方法当中
Runnable updateThread = new Runnable() {
@Override
public void run() {
System.out.println("run......");

// 在run方法内发执行postDelayed或者post方法,延迟三秒,将线程加入队列
handler.postDelayed(updateThread, 3000);
}
};

}

但是我们看到了,上面的例子中我们只是调用了线程的run()方法,并没用调用Thread的start()方法来重启一个线程,因此,上面这个例子中,实际上我们并没有重启一个新的线程,从始至终Handler都是和Activity在同一线程中的。

所以如果我们在使用Handler时,要重启一个线程,使用Handler.post(Thread thread)只是调用了该线程的run方法,我们只有使用java中重启线程的方法来重启一个新的线程,即调用Thread.start()方法,这儿不再多说

时间: 2024-11-11 07:11:51

六、Android学习第五天——Handler的使用(转)的相关文章

Android学习笔记五之Service

Android学习笔记五之Service 1.什么是Service? 什么是Service?Service是Android系统的四大组件之一,官方文档是这样描述Service的: A Service is an application component that can perform long-running operations in the background and does not provide a user interface. Another application comp

Android学习Scroller(五)——详解Scroller调用过程以及View的重绘

MainActivity如下: package cc.ww; import android.os.Bundle; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import android.app.Activity;

Android学习(五)

学号 20189214 <Java程序设计>第十周学习总结 教材学习内容总结 偏好 在sharedPreferences包含一个键值对,可以使用contains方法,来判断指定的键是否存在.可以使用getAll方法对所有的键值对获取为一个Map. SettingFragment类是PreferenceFragment类的一个子类.它是一个简单的类,直接调用了addPreferences FromResource方法来加载3个Preference子类的布局xml文档. 操作文件 Android设

android学习笔记25——事件处理Handler

Handler消息传递机制 ==> android消息机制是另一种形式的“事件处理”,这种机制主要是为了解决android应用的多线程问题. ——android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就导致新启动的线程无法动态改变界面组件的值. 但实际android应用开发中,尤其是涉及动画游戏开发中,需要让新启动的线程周期性地改变界面组件的值,就需要借助Handler消息传递机制处理. Handler类的主要作用: 1.在新启动的线程中发送消息: 2.在主

Android学习(五)—— Android初级控件

Android初级控件 从今天开始就对Android进行正式的学习,首先先来学习一下初级的控件 1.TextView  文本框,用于显示文字,不可编辑. 常用属性 android:autoLink   设置是否当文本为URL链接/email/号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) android:cursorVisible  设定光标为显示/隐蔽,默认显示 android:drawableBottom  在text的下方显示一

android学习笔记五

Android的另外两大组件:BroadcastReceiver和Service. 一.BroadcastReceiver广播接收者,广播是Android中传递事件的方式,有两个方面:广播发送者和广播接收者. 1.广播发送者可以发送两种广播:同步广播和有序广播,两者的区别是 ①接收顺序的区别:同步广播同步接收,有序广播可以通过指定优先级来设置接收顺序 ②是否可以中断的区别:由于有序广播有顺序,才有可能将广播进行中断,不让后来者进行接收;而同步广播则不能中断. 2.广播接收者:广播发送的具体内容就

android学习笔记五。2、其他组件

一.ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1.使用: 在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentResolver中包含query/insert/delete/update等方法用于操作数据,但其内部就是调用ContentProvider的实现类来真正操作的. 使用Conte

【转】 Pro Android学习笔记(六五):安全和权限(2):权限和自定义权限

目录(?)[-] 进程边界 声明和使用权限 AndroidManifestxml的许可设置 自定义权限 运行安全通过两个层面进行保护.进程层面:不同应用运行在不同的进程,每个应用有独自的user ID:在操作层面,Android定义了所需保护的功能和资源,如果应用需要访问这些信息,必须在AndroidManifest.xml文件中请求许可,应用可以有自定义的许可. 进程边界 每个应用的userID不同,使得各个进程之间存在隔离的边界,防止应用直接获取其他应用的数据,需要通过content pro

五、Android学习第四天补充——Android的常用控件(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的Android的几个常用控件的使用方法: 一.RadioGroup和RadioButton——单选按钮 二.Checkbox——复选框 三.Toast——提示框,会自动消失 四.ProgressBar——进度条工具 五.ListView——以列表形式将控件显示出来 下面就对这些内容做个详细的解释: 首