android之handler

来源:互联网 发布:淘宝达人怎么收取佣金 编辑:程序博客网 时间:2024/06/05 15:24

Android程序中一些操作是不能放在activity中的,因为非常耗时,如下载过程。这时,需要使用handler,即重新启动一个与activity并行的线程,下面是使用handler的一个小例子:

package com.example.handlertest;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {//声明两个按钮控件private Button startButton = null;private Button endButton = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器startButton = (Button)findViewById(R.id.startButton);startButton.setOnClickListener(new StartButtonListener());endButton = (Button)findViewById(R.id.endButton);endButton.setOnClickListener(new EndButtonListener());}class StartButtonListener implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//将要执行的线程对象加入消息队列中//异常的消息处理:post方法执行后便返回,updateThread和activity线程就并行运行了handler.post(updateThread);}}class EndButtonListener implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubhandler.removeCallbacks(updateThread);}}//创建handler对象Handler handler = new Handler();//隐名内部类的方式实现Runnable接口,将要执行的操作写在线程对象的run方法中Runnable updateThread = new Runnable() {public void run() {System.out.println("UpdataThread");//在run方法内部,执行postDelayed或者post实现循环handler.postDelayed(updateThread, 3000);}};@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

在上面的例子中,handler在使用时,是直接执行对象的run方法,而没有调用start方法,所以它与使用它的activity属于同一个线程。


原创粉丝点击